Foreach循环输出DateTime对象和其他详细信息



我在获得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块之后转换为对象。未经测试,但它应该工作。

相关内容

最新更新