Отобразить успехи и неудачи тестового соединения в Out-Gridview

Я пытаюсь получить список серверов и последний раз, когда они перезагрузились, чтобы показать в таблице. Однако, если он не отвечает на пинг, мне просто нужно показать его в списке. Я не могу понять, как заставить его добавить в таблицу после 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 в текстовом файле, но это было бы более удобно.

1 ответ

Решение

Вам нужно создать один и тот же объект с одинаковыми свойствами!, в обоих случаях, чтобы 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 а также Last Bootup свойство, которое заполняется на основе успеха пинга.

Пример вывода

Кроме того, недавно у меня был похожий вопрос о создании подобного объекта на основе вывода.

Другие вопросы по тегам