当前位置:  开发笔记 > 编程语言 > 正文

尝试/捕获或If/Else?

如何解决《尝试/捕获或If/Else?》经验,为你挑选了1个好方法。

你好,我很难找到如何让这个脚本工作,我是非常新的脚本,但我很了解它,但仍然找出一些事情.

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并在凭证失败时执行相同操作.



1> Ansgar Wiech..:

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
  }
  ...
}

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有