2010年12月9日木曜日

◆Pingでサーバーの死活確認(Test-Connection)

Test-Connectionコマンドレットを使うとPingコマンドを直接使うよりも簡単に結果を確認することが出来る(文字列解析が不要)

Quietスイッチを指定すると単純にPingが成功したか失敗したかの結果だけを返してくれる。
以下の例では直接Server名を指定するパターンと、Server名の入ったテキストファイルを用意するパターンに対応してみた。

結果はそのままテキストで表示してもよいが、ここではHTML形式にして表示させている。
(HTML化が本題ではないのでごく簡単な表示で済ませている)
また、場合によってはこのHTMLテキストをPowerShell: ◆メールを送る(Send-MailMessage)を使って管理者にメールするなんてのも良いだろう。

PowerShell: ◆コメントベースのヘルプを記述するで書いたコメントも先頭に付けてみた。

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

<#
.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) | %{$pcname[$_] + "," + $isalive[$_]}
$head = (Get-Date).ToString() + " サーバー死活確認"
$html =  $result | ConvertFrom-Csv -Header "PC名","IsAlive" |
 
 
ConvertTo-Html -Head $head -Title "Servers" 
$html | 
Out-File $outputpath

結果はこんな感じになる。
20101209194217

0 件のコメント:

コメントを投稿