Powershell Foreach循环输出DateTime对象以及其他详细信息。

Powershell Foreach循环输出DateTime对象以及其他详细信息。,powershell,datetime,foreach,Powershell,Datetime,Foreach,我很难让PowershellForeach循环输出[DateTime]对象,以便在重新启动后将其与另一个对象进行比较 下面的示例脚本,我希望创建一个哈希表来存储Computername+上次重新启动时间,然后添加一个当前重新启动时间,以便可以比较重新启动时间 $servers = GC D:\Scripts\list1.txt foreach($server in $servers){ Try{ $operatingSystem = Get-WmiObject Win32_Operat

我很难让Powershell
Foreach
循环输出
[DateTime]
对象,以便在重新启动后将其与另一个对象进行比较

下面的示例脚本,我希望创建一个哈希表来存储Computername+上次重新启动时间,然后添加一个当前重新启动时间,以便可以比较重新启动时间

$servers = GC D:\Scripts\list1.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
-编辑时,上述脚本将以下内容作为字符串输出。我正在尝试获取
TypeName:System.DateTime
对象的集合

Server1 last rebooted 10/24/2015 11:39:34
Server2 last rebooted 10/22/2015 01:34:33
所以我四处摸索,得到了这句话,基本上脚本变成了“重新启动计算机,直到一切都是最新的。”

我尝试使用哈希表或PSCustomObject进行计算的原因

不能两者兼而有之

$servers = Get-Content "D:\Scripts\list1.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块之后转换为对象的每个循环过程构建哈希表。未经测试,但应该有效

虽然我相信我们可以通过测试来解决问题,但如果你能告诉我们什么是错误的,以及你希望看到什么,那就容易多了。啊,很好的一点,添加了一些例子。截止日期比他们在镜子里看到的要近!如果你想输出datetime对象,那么不要把它包装成一个字符串。当然,我会有没有服务器引用的日期和时间。我尝试使用哈希表或PSCustomObject进行计算的原因。
$servers = Get-Content "D:\Scripts\list1.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