Я думаю, что ваш код ничего не излучает, чтобы вернуться в ваш конвейер или ваш текстовый файл.Я бы посоветовал нам переписать это, чтобы было легче понять.
Если вы удивляетесь, почему ваш try/catch
не оценивается, это потому, что по вашей Invoke-WebRequest
команде у вас есть -ErrorActionPreference
установлен как SilentlyContinue
.Это прямо говорит PowerShell, что мы не хотим оценивать блок перехвата или оповещать при возникновении ошибки.
Здесь я немного переписал ваш код для ясности и добавил шаг или два для вывода объектов обратно, что и делают строки с одиночными командами $thisPC
.Будь то внутри блока try или блока catch, мы просто создаем новые объекты PowerShell, сопоставляем свойства, затем отправляем их в консоль и добавляем в список дорожек $ComputerList
.Это очень распространенный шаблон, который вы увидите в сценариях, готовых к использованию на предприятии.
$computernames = 'SomePC123','SomePC234','OfflinePC'
$ComputerList = New-Object System.Collections.ArrayList
ForEach ($Computer in $computernames) {
try{
$computerName = (get-wmiobject Win32_ComputerSystem -Computer $computer).name
$IP= Invoke-Command -ComputerName $computer -ScriptBlock {
(Invoke-WebRequest -uri "http://smart-ip.net/myip" -UseBasicParsing ).content -ErrorAction Stop
}
$thisPC = [psCustomObject]@{Name=$computerName;IP=$IP}
$thisPC
$ComputerList.Add($thisPC) | Out-Null
}
catch{
$thisPC = [psCustomObject]@{Name=$Computer;IP='Not Responding'}
$thisPC
$ComputerList.Add($thisPC) | Out-Null
}
}
$ComputerList | out-file ".\output2.csv" -Append
Вот его вывод:
Name IP
---- --
SomePC234 149.178.121.237
OfflinePC Not Responding
SomePC123 48.40.234.122