サーバ大量構築時のキモ ~Windowsへの静的IPアドレス設定バッチ~
先日Linux(というか、Ce…
LinuxやUNIXにあるscriptコマンドと同様に、PowerShellにも操作ログを記録するコマンドが存在する。それが『Start-Transcript(Stop-Transcript)』だ。
さて、このコマンドでログを記録する際、ちょっと困った挙動がある。コマンドプロンプト(cmd.exe)のコマンドを実行すると、ログに記録されないのだ…。
実際に、以下のようなコマンドを実行したとしよう。
Start-Transcript Get-ChildItem ipconfig Stop-Transcript
しかし、出力されるログは以下のようになってしまう。
********************** Windows PowerShell トランスクリプト開始 開始時刻: 20150227002537 ユーザー名 : Work-PC\Work コンピューター : WORK-PC (Microsoft Windows NT 6.1.7601 Service Pack 1) ********************** トランスクリプトが開始されました。出力ファイル: C:\Users\Work\Documents\PowerShell_transcript.20150227002537.txt PS C:\> Get-ChildItem ディレクトリ: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2014/01/25 22:48 cygwin d---- 2014/01/25 18:04 cygwin64 d---- 2014/07/27 21:23 DeploymentShare d---- 2014/01/19 20:24 ipmitool d---- 2014/08/09 7:40 Offiline d---- 2009/07/14 12:20 PerfLogs d-r-- 2015/01/18 17:06 Program Files d-r-- 2015/02/11 17:07 Program Files (x86) d---- 2015/02/26 22:49 PSTools d---- 2014/12/21 16:31 Public d---- 2014/03/03 23:49 teraterm d---- 2014/03/03 22:45 teraterm_log d-r-- 2013/12/21 7:05 Users d---- 2013/12/24 3:29 Windows PS C:\> ipconfig PS C:\> PS C:\> Stop-Transcript ********************** Windows PowerShell トランスクリプト終了 終了時刻: 20150227002552 **********************
見てわかるように、ipconfigの出力値だけが記録されていない。
これを出力させるには、以下のようにコマンドを実行させると良いだろう。
Start-Transcript Get-ChildItem ipconfig | Out-Default Stop-Transcript
今度は、きちんとログに出力させることが出来た。
********************** Windows PowerShell トランスクリプト開始 開始時刻: 20150227003014 ユーザー名 : Work-PC\Work コンピューター : WORK-PC (Microsoft Windows NT 6.1.7601 Service Pack 1) ********************** トランスクリプトが開始されました。出力ファイル: C:\Users\Work\Documents\PowerShell_transcript.20150227003014.txt PS C:\> Get-ChildItem ディレクトリ: C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2014/01/25 22:48 cygwin d---- 2014/01/25 18:04 cygwin64 d---- 2014/07/27 21:23 DeploymentShare d---- 2014/01/19 20:24 ipmitool d---- 2014/08/09 7:40 Offiline d---- 2009/07/14 12:20 PerfLogs d-r-- 2015/01/18 17:06 Program Files d-r-- 2015/02/11 17:07 Program Files (x86) d---- 2015/02/26 22:49 PSTools d---- 2014/12/21 16:31 Public d---- 2014/03/03 23:49 teraterm d---- 2014/03/03 22:45 teraterm_log d-r-- 2013/12/21 7:05 Users d---- 2013/12/24 3:29 Windows PS C:\> PS C:\> ipconfig | Out-Default Windows IP 構成 イーサネット アダプター ローカル エリア接続: 接続固有の DNS サフィックス . . . : IPv6 アドレス . . . . . . . . . . . : 240f:7:63e5:1:80f7:eca9:781f:987d 一時 IPv6 アドレス. . . . . . . . . : 240f:7:63e5:1:8df6:cc92:d66f:6725 リンクローカル IPv6 アドレス. . . . : fe80::80f7:eca9:781f:987d%10 IPv4 アドレス . . . . . . . . . . : 192.168.0.183 サブネット マスク . . . . . . . . : 255.255.255.0 デフォルト ゲートウェイ . . . . . : fe80::1eb1:7fff:fe44:2d3c%10 192.168.0.1 Tunnel adapter isatap.{59563340-7AE0-4F33-AD42-27CD5865DD5A}: メディアの状態. . . . . . . . . . : メディアは接続されていません 接続固有の DNS サフィックス . . . : Tunnel adapter ローカル エリア接続*: 接続固有の DNS サフィックス . . . : IPv6 アドレス . . . . . . . . . . . : 2001:0:5ef5:79fb:147c:1472:8967:8e3c リンクローカル IPv6 アドレス. . . . : fe80::147c:1472:8967:8e3c%12 デフォルト ゲートウェイ . . . . . : PS C:\> PS C:\> Stop-Transcript ********************** Windows PowerShell トランスクリプト終了 終了時刻: 20150227003043 **********************
…う~ん、もうちょっと、Linuxとかの使い勝手に近づいて貰えないものだろうか。
bashからkshになっても、scriptコマンドは問題なく動作してくれるんだけど…