複数のシステムからシステムの稼働時間情報を収集し、それを電子メールで送信するPowerShellスクリプトを作成しようとしています。電子メールを適切な方法で構成し、後でシステムに関する情報を追加できるように、電子メールをフォーマットしたいと思います。
今日、私はこのスクリプトを以下に示します。このスクリプトは、システムのリストに関する稼働時間情報を収集し、これらの情報を配列でSendMail関数に渡します。SendMail関数には、その配列が電子メールに含まれています。ただし、現在の出力は次のようになります。
稼働時間リスト:再起動02/19/2013 04:04:52 MyServer01コンピューター稼働時間:23日9時間再起動02/15/2013 04:17:40 MyServer02コンピューター稼働時間:27日9時間
出力または電子メールテキストを次のようにしたいと思います。
システム| 再開日時| 稼働時間 MyServer01 02/17/201304:04:5225日9時間 MyServer02 02/17/201304:04:5225日9時間
電子メールのテキストをフォーマットするにはどうすればよいですか、それとも配列を電子メール関数に渡す前にフォーマットする必要がありますか。
スクリプト自体:
`
function SendMail([string]$arg1){
#SMTP server name
$smtpServer = "mysmtp"
#Creating a Mail object
$msg = new-object Net.Mail.MailMessage
#Creating SMTP server object
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
#Email structure
$msg.From = "my@overtherainbow.ddd"
$msg.ReplyTo = "noreply@overtherainbow.ddd"
$msg.To.Add("my@overtherainbow.ddd")
$msg.subject = "System uptime"
$msg.body = ("List og servers and uptime:" + $arg1 )
#Sending email
$smtp.Send($msg)}
function CheckUptime($listofservers){
$k =@()
foreach($s in $listofservers){
$Booted = Get-WmiObject -Class Win32_OperatingSystem -Computer $s
$Calc = [DateTime]::Now - $Booted.ConvertToDateTime($Booted.LastBootUpTime)
$k += " Restarted " +
$Booted.ConvertToDateTime($Booted.LastBootUpTime) +
" " + $s + " " +
" Computer Uptime: " +
$Calc.days + " " +
"days and", $Calc.hours + " hours"
}
return $k
}
#Defining list og servers
$listofservers = "MyServer01", "MyServer02"
#Calling function
$message = CheckUptime($serverlist)
SendMail($message)
`