我有一个脚本来测试连接到服务器列表,如果可以联系,获取服务的状态,并将结果放入三个变量中,$Computer
,$Ping
(True/False),和$Service
(正在运行或已停止)。try-catch跳过一个步骤
输出是散列表,但我只能显示可联系的服务器,而不是无法联系的服务器。
我已经把一个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'。固定。 –