PowerShell: ◆Pingでサーバーの死活確認(Test-Connection)ではCSV経由でオブジェクトを作りHTML化していたが、CSVの代わりに独自のオブジェクト(いわゆるマイオブジェクト)を使ってみる。
C#でクラスを作ってインスタンシングしても良いのだが、ここではPowershellだけでやって見る。
独自のオブジェクトを作るにはPsObject(正式にはPsCustomObjectか?)のインスタンスを作り、それにメンバーを追加していけば良さそうだ。
メンバーの追加はPowerShell: ◆オブジェクトにプロパティを追加する(Add-Member)でもやっているので特に目新しいことは無い。
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 | <# .SYNOPSIS サーバーの死活確認を行う .DESCRIPTION Serversに指定したServerまたはinputpathで指定したテキストファイル中のServerに 対してPingを送信しその死活を確認する。 結果は指定されたパスにHTML形式で出力する。 .NOTES inputpath、serversともに指定しないとエラーとなる。 .LINK http://www.powershell.com .EXAMPLE Ping.ps1 -inputpath w:\pcname.txt .EXAMPLE Ping.ps1 -servers vista3,goemon #> param( [string]$inputpath, [string[]]$Servers, [string]$outputpath="W:\servers.htm" ) if($inputpath){ $pcname = Get-Content $inputpath }elseif($Servers){ $pcname = $servers }else{ Write-Warning "Please Specify Params" exit } $isalive = @(Test-Connection -ComputerName $pcname -Quiet) $result = 0..($pcname.Count - 1) | %{ New-Object psobject | Add-Member -Name Pc名 -type NoteProperty -Value $pcname[$_] -PassThru | Add-Member -Name IsAlive -type NoteProperty -Value $isalive[$_] -PassThru } $head = (Get-Date).ToString() + " サーバー死活確認" $html = $result | ConvertTo-Html -Head $head -Title "Servers" $html | Out-File $outputpath |
ちなみに、メンバーの追加はAdd-Memberの代わりにハッシュテーブルにして一度に与えても良い。
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 | <# .SYNOPSIS サーバーの死活確認を行う .DESCRIPTION Serversに指定したServerまたはinputpathで指定したテキストファイル中のServerに 対してPingを送信しその死活を確認する。 結果は指定されたパスにHTML形式で出力する。 .NOTES inputpath、serversともに指定しないとエラーとなる。 .LINK http://www.powershell.com .EXAMPLE Ping.ps1 -inputpath w:\pcname.txt .EXAMPLE Ping.ps1 -servers vista3,goemon #> param( [string]$inputpath, [string[]]$Servers, [string]$outputpath="W:\servers.htm" ) if($inputpath){ $pcname = Get-Content $inputpath }elseif($Servers){ $pcname = $servers }else{ Write-Warning "Please Specify Params" exit } $isalive = @(Test-Connection -ComputerName $pcname -Quiet) $result = 0..($pcname.Count - 1) | %{ $hash = @{} $hash.PC名 = $pcname[$_] $hash.isalive = $isalive[$_] New-Object pscustomobject -Property $hash } $head = (Get-Date).ToString() + " サーバー死活確認" $html = $result | ConvertTo-Html -Head $head -Title "Servers" $html | Out-File $outputpath |
参考までにハッシュテーブルは文字列で定義しておいてConvertFrom-StringDataコマンドレットで変換して作ることも出来る。
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 | <# .SYNOPSIS サーバーの死活確認を行う .DESCRIPTION Serversに指定したServerまたはinputpathで指定したテキストファイル中のServerに 対してPingを送信しその死活を確認する。 結果は指定されたパスにHTML形式で出力する。 .NOTES inputpath、serversともに指定しないとエラーとなる。 .LINK http://www.powershell.com .EXAMPLE Ping.ps1 -inputpath w:\pcname.txt .EXAMPLE Ping.ps1 -servers vista3,goemon #> param( [string]$inputpath, [string[]]$Servers, [string]$outputpath="W:\servers.htm" ) if($inputpath){ $pcname = Get-Content $inputpath }elseif($Servers){ $pcname = $servers }else{ Write-Warning "Please Specify Params" exit } $isalive = @(Test-Connection -ComputerName $pcname -Quiet) $result = 0..($pcname.Count - 1) | %{ $hashstring = @" PC名 = $($pcname[$_]) isalive = $($isalive[$_]) "@ $hash = ConvertFrom-StringData($hashstring) New-Object pscustomobject -Property $hash } $head = (Get-Date).ToString() + " サーバー死活確認" $html = $result | ConvertTo-Html -Head $head -Title "Servers" $html | Out-File $outputpath |
0 件のコメント:
コメントを投稿