0

我正在尝试获取服务器列表以及它们上次重新启动以显示在表格中的时间。但是,如果它不响应 ping,我只需要它显示在列表中。我似乎无法弄清楚如何让它在之后添加到表格中else

Import-CSV $Downtime | % {
if(Test-Connection $_.server -Quiet -count 1){
    Get-WmiObject Win32_OperatingSystem -ComputerName $_.server | 
    select @{LABEL="Name"; EXPRESSION = {$_.PSComputerName}}, @{LABEL="Last Bootup"; EXPRESSION = {$_.convertToDateTime($_.LastBootupTime)}}
    }
else{@{LABEL="Name"; EXPRESSION = {$_.server}}
    }
} | Out-GridView

我总是可以将 else 结果保存在文本文件中,但这会更方便。

4

1 回答 1

0

您需要在这两种情况下创建具有相同属性的相同对象!以便 PowerShell 了解两者之间的关联。以下示例使用 if/else 构建自定义哈希表,并为每个循环传递输出对象。

Import-CSV $Downtime | ForEach-Object {
    $props = @{}
    $server = $_.server
    if(Test-Connection $server -Quiet -count 1){
        $wmi= Get-WmiObject Win32_OperatingSystem -ComputerName $server 
        $props.Name = $wmi.PSComputerName 
        $props."Last Bootup" = $wmi.convertToDateTime($wmi.LastBootupTime)
    }else{
        $props.Name = $server
        $props."Last Bootup" = "Could not contact"
    }
    New-Object -TypeName psobject -Property $props
} | Out-GridView

我曾多次使用$server$_ 更改上下文,因此我们希望能够引用我们正在处理的 CSV 中的当前行。

我不知道你的 PowerShell 版本是什么,所以我将假设 2.0 并创建支持它的对象。

Name在这两种情况下,都会使用and属性创建一个对象,该Last Bootup属性基于 ping 的成功填充。

样本输出

顺便说一句,不久前我有一个类似的问题,关于创建类似的基于对象的输出。

于 2015-08-26T19:41:57.137 回答