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