大家好,我在试图弄清楚如何使这个脚本工作时遇到了麻烦,我对脚本非常陌生,但我确实了解其中的大部分内容,但仍在弄清楚一些事情。
try {
Test-Connection -Computername $_ -count 1 -ErrorAction Stop
} catch {
$_.Exception.ErrorCode -eq 0x800706ba
} `
{
$err = 'Unavailable (Host Offline or Firewall)'
}
try {
Test-UserCredentials -Username testuser -Password (Read-Host -AsSecureString)
} catch {
$_.CategoryInfo.Reason -eq 'UnauthorizedAccessException'
} `
{
$err = 'Access denied (Check User Permissions)'
}
Write-Warning "$computer- $err" | Out-File -FilePath c:\temp\Folder\Errors.txt -Append
我正在寻找的是这个脚本来测试系统是否响应。如果为 True,则下一步是测试凭据,最后是执行 get-wmiobject 查询。但是,如果系统不响应 ping,那么我想捕获未能响应 ping 的主机名,捕获它并将其导出到 txt 并在凭据失败时执行相同操作。
最佳答案
try..catch
用于处理终止错误。不要通过在不需要时强制检查失败来滥用它进行状态检查。如果您只想测试系统的可用性,请使用参数 -Quiet
作为 if
条件运行 Test-Connection
:
if (Test-Connection -ComputerName $_ -Count 1 -Quiet) {
...
}
如果您需要级联多个检查,您可以通过反转检查并返回适当的消息以更易读的方式进行:
function Test-Multiple {
...
if (-not (Test-Connection -ComputerName $_ -Count 1 -Quiet)) {
return "Host $_ unavailable."
}
$pw = Read-Host -AsSecureString
if (-not (Test-UserCredentials -Username testuser -Password $pw)) {
return 'Login failed for user testuser.'
}
...
}
如果您想在日志文件中获取有关 ping 或登录失败的信息,您可以将其附加到相应的文件中:
function Test-Multiple {
...
if (-not (Test-Connection -ComputerName $_ -Count 1 -Quiet)) {
$_ | Add-Content 'C:\path\to\unavailable.log'
return
}
$pw = Read-Host -AsSecureString
if (-not (Test-UserCredentials -Username testuser -Password $pw)) {
$_ | Add-Content 'C:\path\to\login_failure.log'
return
}
...
}
关于powershell - Try/Catch 还是 If/Else?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34268628/