我在获得Powershell Foreach
循环输出[DateTime]
对象时遇到了麻烦,因此我可以在重新启动后将其与另一个对象进行比较。
下面的示例脚本,我希望创建一个哈希表来存储Computername +上次重启时间,然后添加当前重启时间,以便可以比较重启时间。
$servers = GC D:Scriptslist1.txt
foreach($server in $servers){
Try{
$operatingSystem = Get-WmiObject Win32_OperatingSystem -ComputerName $server
$current = [Management.ManagementDateTimeConverter]::ToDateTime($operatingSystem.LastBootUpTime)
"$server last rebooted $current"
}#end try
Catch{
$err = $_.Exception.GetType().FullName
Write-Warning "$err on $($server)"}#end catch
}#End foreach
-Edit,上面的脚本以字符串的形式输出下面的内容。我正试图获得TypeName: System.DateTime
对象的集合。
Server1 last rebooted 10/24/2015 11:39:34
Server2 last rebooted 10/22/2015 01:34:33
所以我又戳了戳,得到了这行,基本上脚本变成了"重新启动计算机,直到所有内容都是当前的。"
IF($current -gt ((Get-Date).AddHours(-6)))
{"Server reboot is current for $server"}ELSE{"Please check $server"}
我试图使用哈希表或PSCustomObject的原因。
不能两者兼而有之!
$servers = Get-Content "D:Scriptslist1.txt"
$servers | ForEach-Object{
$props = @{}
$props.Server = $_
Try{
$operatingSystem = Get-WmiObject Win32_OperatingSystem -ComputerName $props.Server
$props.LastBootTime = [Management.ManagementDateTimeConverter]::ToDateTime($operatingSystem.LastBootUpTime)
} Catch {
$err = $_.Exception.GetType().FullName
$props.LastBootTime = $null
Write-Warning "$err on $($props.Server)"
}#end catch
New-Object -TypeName psobject -Property $props
}#End foreach
更改循环结构,因为如果需要,输出更容易管道化。为每个循环循环构建一个哈希表,在try/catch块之后转换为对象。未经测试,但它应该工作。