1. ホーム
  2. スクリプト・コラム
  3. パワーシェル

PowerShell 4.0によるサーバセットアップの自動化

2022-01-04 04:32:41

PowerShellは、Microsoft Windows OSの強力なツールであり、PowerShellのバージョンはWindowsのリリースに合わせて更新され、例えば、最新のWindows Server 2012 R2/Windows 8.1では、PowerShell 4.0が利用可能である。Windows Serverの新バージョンでは、来年、PowerShellのバージョン5.0が提供される予定です。

PowerShell 4.0では、管理者に役立つ多くの新機能が搭載されており、特に自動化機能が強化されています。ここでは、海外サイトwindowsitproで公開されているMark Minasi氏のPowerShellのTipsをいくつか紹介します。これらのTipsは、著者が何度も試した結果であり、Windows Server 2012、Windows Server 2012 R2、およびWindows 8に特化した内容となっています。

PowerShellが自動化によってWindowsサーバー管理者の生活をいかに楽にしてくれるかを見ていきましょう。

ヒント1:USB3.0インストールスティックを作成する

使用したツール USB 3.0 フラッシュドライブに Windows Server 2012 R2 のインストールイメージと、無料でダウンロードできる Automation and Deployment Kit (ADK) である Windows System Image Manager (WSIM) で作成した XML ファイルをセットしています。WSIMは、プロダクトキーからディスク上のInternet Explorer(IE)の拡張セキュリティ設定の無効化まで、作成するシステムに関連する数十の質問に事前に回答する必要があります。
これらの質問を終えると、WSIMはautounattend.xmlというファイルを生成します。このファイルをUSBドライブインストールのルートディレクトリにコピーすると、Windowsセットアップがautounattend.xmlのコマンドを読み込んで実行します。(USBメモリ経由のインストールは割と馬鹿にできない方法だと思っていたら、そうでもないようです。Server 2012のSetupはUSB 3.0をサポートしており、すべての削除と再構築の作業は、低電力の場合、わずか3~4分で完了します。(この方法でWebサーバーをセットアップすると、1分もかからずにインストールできるものもありました)

ヒント2:トンネルアダプタを捨て、IPv6をいじる

IPConfigの出力が多すぎるようです。以下の3行のコマンドを貼り付けてコピーすると、IPConfigの出力がよりスリムになるのがわかります。
Set-NetTeredoConfiguration -Type Disabled
Set-NetIsatapConfiguration -State Disabled (無効)
Set-Net6to4Configuration -State Disabled (ネット6ト4コンフィギュレーション -状態無効
IPv6を使用していて、組織がTeredo、SATAP(Intrasite Automatic Tunnel Addressing Protocol)、または6to4技術を使用している場合は、そのままにしておいてください。

undoコマンドは、デフォルトを無効にするための単なる代用品です。この線に沿って、IPv6を完全に無効にすることを勧めているわけではありませんが、そうしている顧客や同僚がたくさんいるので、IPv6レスにしたい場合は、任意のネットワークアダプタでこのコマンドを使用することができます。

これらのコマンドを元に戻したい場合は、デフォルトの無効化に戻すだけです。IPv6を完全に無効にすることを勧めているわけではありませんが、そうしたい場合は、どのネットワークアダプターでもこのコマンドを使用することができます。

コピーコード コードは以下の通りです。

Set-NetAdapterBinding -name <NIC name> -DisplayName "Internet Protocol Version 6 (TCP/IPv6)" -Enabled:$false

有線NICが1枚しかないハードウェアでサーバーを作成する場合、コマンドは次のようになります。

コピーコード コードは以下の通りです。

Set-NetAdapterBinding -name Ethernet -DisplayName "Internet Protocol Version 6 (TCP/IPv6)" -Enabled:$false

また、長いDisplayNameの値をスキップするために、ComponentID

コピーコード コードは以下の通りです。

Set-NetAdapterBinding -name Ethernet -ComponentID ms_tcpip6

NICのDisplayNameとComponentIDの値です。

コピーコード コードは以下の通りです。

Get-NetAdapterBinding | select InterfaceAlias,DisplayName,ComponentID | OGV

ヒント3:サーバーのTCP/IPとDNSを設定する

サーバーには固定IPアドレスが必要ですが、その設定にはコツがいります。PowerShellのNew-NetIPAddressおよびSet-DNSClientServerAddressコマンドレットを使用すると、プロセスを簡略化することができます。少し長いですが、Netsh コマンドよりもはるかに読みやすいでしょう。
New-NetIPAddressは以下の通りです。

コピーコード コードは以下の通りです。

New-NetIPAddress -interfacealias <NICname> -IPAddress <address> -DefaultGateway <address> -PrefixLength <nn>
eg. New-NetIPAddress -InterfaceAlias Ethernet -IPAddress 10.30.30.8 -DefaultGateway 10.30.30.1 -PrefixLength 24

PrefixLengthは、サブネットマスクの1の数を指します。255.255.255.0のようなIPv4サブネットマスクを記述するために、短いクラスレスドメイン間ルーティング(IDR)方式を使用します。Microsoftは、このコマンドレットに-dnsserverオプションを追加していませんが、DNSサーバーおよびDNSクライアントの提供を容易にすることができるDNS関連のコマンドレットが多数存在します。

いずれにせよ、ネットワークカードに静的なDNSサーバーのアドレスを設定するには、Set-DNSClientServerAddressを使用すればよいだけである。

コピーコード コードは以下の通りです。

Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses 10.30.30.7

システムを復元し、DHCP経由でDNSサーバーを見つけたい場合は、次のように-ResetServerAddressesを使用します。

コピーコード コードは以下の通りです。

Set-DnsClientServerAddress -InterfaceAlias Ethernet -ResetServerAddresses