PowerShell 4.0によるサーバセットアップの自動化
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
関連
-
PowerShellコマンド集(概要)
-
PowerShellのジョブ関連コマンドとタスクの並列実行の解説
-
オリジナルpowershellスクリプト gadget ctracert.ps1 trace route(win8+系)
-
Win Server 2008 R2のためのPowerShellマネジメント
-
PowerShellで現在実行中のスクリプトのパスを取得する方法
-
Powershellの相互排他的パラメータの使用例
-
Powershellで隠しファイルを表示する方法
-
PowerShellスクリプトファイルをcmdで直接実行する方法
-
Windowsシステムのシリアル番号を取得するPowerShellスクリプト
-
PowerShellによるパスワード難読化の例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
powershellでSQL SERVERの全バージョンを弄る方法
-
PowerShellのヒントとコツ
-
PowerShellのエスケープ文字とは何ですか?
-
Powershellは2つのフォルダの差分を比較する
-
PowerShellでregularとValidateSetを使用してパラメータを検証する
-
Powershellで "確認プロンプト "をブロックする方法
-
PowerShell ローカルアカウントスクリプト共有の追加
-
PowerShell ISEオートメーションの簡単な例
-
Powershellは、ローカルレジストリからすべてのソフトウェア関連付けの拡張子を読み取ります。
-
PowerShell で iso8601 形式の日付と DateTime オブジェクトを交換する例