Jos*_*han 3 powershell if-statement credentials try-catch
你好,我很难找到如何让这个脚本工作,我是非常新的脚本,但我很了解它,但仍然找出一些事情.
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
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是这个脚本来测试系统是否响应.如果为True则下一步将是测试凭据,最后一步是执行get-wmiobject查询.但是如果系统没有响应ping,那么我想捕获无法响应ping的主机名,捕获它并将其导出到txt并在凭证失败时执行相同操作.
try..catch用于处理终止错误.不要滥用它来进行状态检查,因为强制检查在不需要的时候会很难.如果您只想测试Test-Connection以参数-Quiet作为if条件运行的系统的可用性:
if (Test-Connection -ComputerName $_ -Count 1 -Quiet) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果需要级联多个检查,则可以通过反转检查并使用适当的消息返回,以更易读的方式执行此操作:
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.'
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果您想在日志文件中获取有关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
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |