У меня есть сценарий, который проверяет соединение с списком серверов и, если он доступен для контакта, получает статус службы и помещает результаты в три переменные: $Computer
, $Ping
(True/False), и $Service
(Запуск или останов).try-catch в обход этапа
Вывод находится в хеш-таблице, но я могу только показать серверы, к которым подключаются ARE, а не те, которые не могут быть подключены.
я поставил try
/catch
в $Ping
блоке, а также -ErrorAction Stop
, так что он не пытается запустить $Service
сценарий, и вместо того, чтобы перейти к следующему $Computer
в массиве. Я думаю, что я пытаюсь сделать две вещи сразу, что конфликтуют друг с другом:
- добавить переменные в
@Splat
и - не обрабатывают дальше.
Есть на самом деле гораздо больше запросов удаленного реестра в моем сценарии, которые будут иметь никакого значения, если $Computer
не может быть соприкасаться, но я сократили его на этот пост.
Function Get-Ping {
$Servers = (gc "c:\temp\test.txt")
foreach ($Computer in $Servers) {
Write-Host
Write-Host "---------------------------------"
Write-Host "QUERYING $Computer"
Write-Host
Write-Host "Performing ping test..."
try {
$Ping = Test-Connection $Computer -Count 1 -ErrorAction Stop
} catch {
Write-Warning "Cannot Ping $Computer"
Write-Host "Trying next computer..."
Write-Host
continue
}
if ($Ping) {$Ping="$True"}
Write-Host $Computer "can be pinged"
$svcRRStopped = $false
if ($Computer -ne $env:COMPUTERNAME) {
Write-Host "Check RemoteRegistry status..."
}
$svcRR = Get-Service -ComputerName $Computer -Include RemoteRegistry
$SelectSplat = @{
Property = (
'Computer',
'Ping',
'Service'
)}
New-Object -TypeName PSObject -Property @{
Computer=$Computer
Ping=$Ping
Service=$svcRR.status
} | Select-Object @SelectSplat
}
}
$results = Get-Ping
$tableFragment = $results | Select 'Computer','Ping','Service'
$tableFragment
Спасибо. Тем не менее, он возвращает последний элемент в текстовом файле 6 раз (один раз для каждого элемента в списке), – JDGEEK
Не забывайте также, что будет еще много запросов к каждому компьютеру в списке, который следует игнорировать если PING недоступен, но он ДОЛЖЕН добавить значение в PSObject, а не полностью игнорировать его из результатов. – JDGEEK
@JDGEEK Я забыл изменить переменную цикла на '$ _' при изменении цикла с' foreach' на ' ForEach-Object'. Исправлена. –