你好,我很难找到如何让这个脚本工作,我是非常新的脚本,但我很了解它,但仍然找出一些事情.
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
用于处理终止错误.不要滥用它来进行状态检查,因为强制检查在不需要的时候会很难.如果您只想测试Test-Connection
以参数-Quiet
作为if
条件运行的系统的可用性:
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 } ... }