#0. はじめに
前回予告したとおり、サーバOSの初期設定時に使いそうなコマンドレットについてまとめます。一部Windowsのコマンドを使用します。
#1. タイムゾーンの設定
いきなりコマンドレットではありません。タイムゾーンを設定するためのユーティリティが用意されているため、こちらを利用して設定をします。
# 現在のタイムゾーン設定を取得
PS> tzutil /g
Tokyo Standard Time
# タイムゾーンとして設定できる値の一覧を取得
PS> tzutil /l
(UTC-12:00) 国際日付変更線 西側
Dateline Standard Time
(UTC-11:00) 協定世界時-11
UTC-11
(UTC-10:00) ハワイ
Hawaiian Standard Time
...(以下略)
# タイムゾーンを設定する(東京)
PS> tzutil /s "Tokyo Standard Time"
#2. Windows ファイアーウォール
コマンドレット | 説明 | TechNet |
---|---|---|
Get-NetFirewallProfile | ファイアーウォールの設定を取得 | Link |
Set-NetFirewallProfile | ファイアーウォールの設定を変更 | Link |
PS> Get-NetFirewallProfile
Name : Domain
Enabled : True
...(以下略)
# Windows ファイアーウォールを無効化する
PS> Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled False
#3. プロキシ設定
こちらもWindowsのコマンド(netsh)を使います。あとから説明するWindows Updateをプロキシかある環境で実行するために必要になります。netshコマンドはプロキシ設定以外にもネットワーク周りの設定を色々できます。
netsh
http://msdn.microsoft.com/ja-jp/library/cc778925%28v=ws.10%29.aspx
netsh winhttp
http://technet.microsoft.com/ja-jp/library/cc731131%28v=ws.10%29.aspx
# プロキシ設定の表示
PS> netsh winhttp show proxy
現在の WinHTTP プロキシ設定:
直接アクセス (プロキシ サーバーなし)。
# プロキシの設定
PS> netsh winhttp set proxy proxy-server="192.168.1.1:8080"
現在の WinHTTP プロキシ設定:
プロキシ サーバー: 192.168.1.1:8080
バイパス一覧 : (なし)
# プロキシ設定のリセット
PS> netsh winhttp reset proxy
現在の WinHTTP プロキシ設定:
直接アクセス (プロキシ サーバーなし)。
#4. Windows Update
コマンドレットやコマンドは用意されていないので、下記のモジュールを追加します。
Windows Update PowerShell Module
https://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc
zipファイルをダウンロードし、展開してできたフォルダ(PSWindowsUpdate)を%WINDIR%\System32\WindowsPowerShell\v1.0\Modulesに移動させます。
その後、powershell上でモジュールをインポートすることで使用できるようになります。
PS> Import-Module PSWindowsUpdate
PS> Get-Command -Module PSWindowsUpdate
CommandType Name ModuleName
----------- ---- ----------
Function Add-WUOfflineSync PSWindowsUpdate
Function Add-WUServiceManager PSWindowsUpdate
Function Get-WUHistory PSWindowsUpdate
Function Get-WUInstall PSWindowsUpdate
Function Get-WUInstallerStatus PSWindowsUpdate
Function Get-WUList PSWindowsUpdate
Function Get-WURebootStatus PSWindowsUpdate
Function Get-WUServiceManager PSWindowsUpdate
Function Get-WUUninstall PSWindowsUpdate
Function Hide-WUUpdate PSWindowsUpdate
Function Invoke-WUInstall PSWindowsUpdate
Function Remove-WUOfflineSync PSWindowsUpdate
Function Remove-WUServiceManager PSWindowsUpdate
Function Update-WUModule PSWindowsUpdate
それぞれのコマンドレットの詳細については、Get-Helpコマンドレットを用いて確認して下さい。
以下では実際にWindows Updateを実行するために使用するコマンドレットについて説明します。
Get-WUInstall
色々なオプションが用意されていますが、特に重要そうだと思ったものをリストアップしておきます。
オプション | 説明 |
---|---|
-Category | 指定されたタイプのアップデートのみインストール対象とする ('Updates', 'Security Updates', 'Critical Updates'など) |
-NotCategory | 指定されたタイプ以外のアップデートのみインストール対象とする ('Updates', 'Security Updates', 'Critical Updates'など) |
-Title | タイトルに指定した文字列が含まれているアップデートのみインストール対象とする |
-NotTitle | タイトルに指定した文字列が含まれていないアップデートのみインストール対象とする |
-KBArticleID | 指定したKBArticleIDのアップデートのみインストール対象とする |
-NotKBArticleID | 指定したKBArticleID以外のアップデートのみインストール対象とする |
-AcceptAll | アップデートをすべて受け入れる |
-AutoReboot | アップデート後に自動的に再起動する |
Get-WUInstallコマンドレットではアップデートそれぞれに対してインストールするかどうか選択ポップアップが上がってきます。自動化時には対話式は利用したくないため、それをすべて受け入れるために-AcceptAllオプションを利用できます。
実際にWindows Updateを実行するためには以下のようにコマンドレットを実行します。
PS> Import-Module PSWindowsUpdate
PS> Get-WUInstall -AcceptAll -AutoReboot
#5. IE ESCの無効化
こちらもコマンドレットもコマンドも用意されていないため、レジストリを直接変更しIEプロセスの停止を行って設定を反映させています。
PS> $AdminKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}"
PS> $UserKey = "HKLM:\SOFTWARE\Microsoft\Active Setup\Installed Components\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}"
PS> Set-ItemProperty -Path $AdminKey -Name "IsInstalled" -Value 0
PS> Set-ItemProperty -Path $UserKey -Name "IsInstalled" -Value 0
PS> Stop-Process -Name Explorer
#6. IPの固定化
ADなど一部のサービスではDHCPではなくIPを固定化して利用することが推奨されています。そうでなくてもサーバとして運用する場合はIPを固定化して運用するのが普通です。
この章ではそのためのコマンドレットを記載します。このコマンドレットはPowershell v3.0で追加されたものなので、Windows Server 2012以降が対象となります。
コマンドレット | 説明 | TechNet |
---|---|---|
New-NetIPAddress | IPアドレスの設定を新規に作成する | Link |
オプション | 説明 |
---|---|
-AddressFamily | IPアドレスのタイプを指定する。"IPv4" or "IPv6" |
-DefaultGateway | デフォルトゲートウェイを指定する。 |
-InterfaceAlias | インターフェースのエイリアス名を指定する。 Get-NetIPAddressコマンドレットなどで確認できる。-InterfaceIndexと択一 |
-InterfaceIndex | インターフェイスのインデックスを指定する。 Get-NetIPAddressコマンドレットなどで確認できる。-InterfaceAliasと択一 |
-IPAddress | IPアドレスを指定する。 |
-PrefixLength | サブネットマスクの長さ(bit数)を指定する。 |
New-NetIPAddress -InterfaceAlias "イーサネット" -IPAddress "192.168.1.50" -PrefixLength 24 -AddressFamily "IPv4" -DefaultGateway "192.168.1.1"
新規のIPアドレスで固定する場合は上記で問題ありませんが、すでにDHCPで配布されているIPで固定したいといった場合、上記のコマンドではエラーとなります。普通はこのようなことはないと思いますが、AWSやAzureといったクラウド環境でIPを固定化しようとした場合にこの問題が発生することがあります。その場合はIPが設定されている既存の削除して上記のコマンドを実行する必要があります。
既存の設定を削除するコマンドレットは以下になります。
コマンドレット | 説明 | TechNet |
---|---|---|
Remove-NetIPAddress | IPアドレスの設定を削除する | Link |
オプション | 説明 |
---|---|
-AddressFamily | IPアドレスのタイプを指定する。"IPv4" or "IPv6" |
-IPAddress | IPアドレスを指定する |
-Confirm | コマンドレット実行前にプロンプトで確認するかどうか |
Remove-NetIPAddressコマンドレットはデフォルトでは実行前に本当に削除してよいかプロンプトが上がってきます。それを無効化するために-Confirmオプションを利用します。
# 既存の設定を削除
Remove-NetIPAddress -IPAddress "192.168.1.50" -AddressFamily "IPv4" -Confirm:$false
# 同じIPで新規作成し、IPを固定化
New-NetIPAddress -InterfaceAlias "イーサネット" -IPAddress "192.168.1.50" -PrefixLength 24 -AddressFamily "IPv4" -DefaultGateway "192.168.1.1"
※ 一旦設定を削除して新規に作成するため、実行に失敗するとネットワーク経由で接続できなくなります。別経路の用意など対策をしてから利用してください。
#7. DNS設定
このコマンドレットもPowershell v3.0で追加されたものなので、Windows Server 2012以降が対象となります。
コマンドレット | 説明 | TechNet |
---|---|---|
Set-DnsClientServerAddress | DNSサーバの設定をする | Link |
オプション | 説明 |
---|---|
-InterfaceAlias | インターフェースのエイリアス名を指定する。 Get-NetIPAddressコマンドレットなどで確認できる。-InterfaceIndexと択一 |
-InterfaceIndex | インターフェイスのインデックスを指定する。 Get-NetIPAddressコマンドレットなどで確認できる。-InterfaceAliasと択一 |
-ServerAddresses | DNSサーバのIPアドレスを指定する。カンマ区切りで2つまで指定可能 |
PS> Set-DnsClientServerAddress -InterfaceAlias "イーサネット" -ServerAddresses "192.168.1.1"
#8. おまけ
IPやDNSの設定のところで唐突にでてきているインターフェイスエリアス名やインターフェイスインデックスの調べ方について少し記載しておきます。
インターフェイスのリストを取得するだけならば、Get-NetIPInterfaceコマンドレットで可能です。このコマンドレットもPowershell v3.0で追加されたものなので、Windows Server 2012以降が対象となります。
コマンドレット | 説明 | TechNet |
---|---|---|
Get-NetIPInterface | ネットワークインターフェイスの一覧を表示する | Link |
このコマンドの実行結果には関連情報が殆ど表示されないため、対象とするインターフェイスが判別しにくいという問題がありますが、これらの情報で判別が付く場合にはエイリアス名とインデックスが同時に取得でき、また余計な情報が表示されないためインターフェイス数が多くても見やすいです。
ifIndex InterfaceAlias AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp ConnectionState PolicyStore
------- -------------- ------------- ------------ --------------- ---- --------------- -----------
4 Wi-Fi IPv4 1500 25 Enabled Connected ActiveStore
1 Loopback Pseudo-Interface 1 IPv4 4294967295 50 Disabled Connected ActiveStore
3 イーサネット IPv4 1500 20 Enabled Disconnected ActiveStore
インデックスが1列目、エイリアス名が2列目に表示されます。
インターフェイスエイリアス名
その名の通りインターフェイスに付けられたエイリアス名です。
下記で表示されている名前がインターフェイスエリアス名です。
「コントロールパネル」→「ネットワークとインターネット」→「ネットワークの状態とタスクの表示」→「アダプター設定の変更」
このエリアス名は「ipconfig」コマンドなどで表示されるときにも用いられています。
PS> ipconfig
Wireless LAN adapter Wi-Fi:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.x.x
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.x.x
イーサネット アダプター イーサネット:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
無線の場合は「Wireless LAN adapter」のあとにインターフェイスエリアス名が続き、有線の場合は「イーサネット アダプター」のあとにインターフェイスエリアス名が続くようです。上記の場合は、無線のインターフェイスエリアス名が「Wi-Fi」、有線のインターフェイスエリアス名が「イーサネット」となります。
##インターフェイスインデックス
インターフェイスを一意に認識するためのインデックス番号です。Get-NetIPAddressコマンドレットを用いることで取得できます。このコマンドレットもPowershell v3.0で追加されたものなので、Windows Server 2012以降が対象となります。
コマンドレット | 説明 | TechNet |
---|---|---|
Get-NetIPAddress | ネットワークインターフェイスに割り当てられているIP情報を表示する | Link |
PS> Get-NetIPAddress
IPAddress : 192.168.x.x
InterfaceIndex : 4
InterfaceAlias : Wi-Fi
AddressFamily : IPv4
Type : Unicast
PrefixLength : 24
PrefixOrigin : Dhcp
SuffixOrigin : Dhcp
AddressState : Preferred
ValidLifetime : 00:39:36
PreferredLifetime : 00:39:36
SkipAsSource : False
PolicyStore : ActiveStore
...(以下略)
上記の場合はインデックスは「4」です。Get-NetIPAddressコマンドレットを用いることでエイリアス名も取得できます。
#99. おわりに
個人的にやりたかったことはとりあえず出来るようになったので、一旦PowerShellの話題は今回で終了にします。次回は今のところ全くの未定ですが、Ansible触りたいなぁと思っている今日このごろ。