捕获此Powershell脚本中的错误

时间:2013-01-24 13:51:21

标签: powershell try-catch

我有这个测试脚本来更改服务器列表上的管理员密码。 如果服务器无法ping通或无法找到帐户等,我已将脚本设置为记录错误。但是除此之外,我还想捕获发生的任何其他错误并将其添加到日志文件。我知道您可以使用“Try and Catch”进行错误处理,但到目前为止还没有任何运气。

有人会善意地展示如何做到这一点吗?

这是脚本

    $date = Get-Date
$user = "Administrator"
$newpwd = "MyPassword"

     $servers = gc C:\servers.txt

foreach ($server in $servers) 
{ 


  $ping = new-object System.Net.NetworkInformation.Ping

  $Reply = $null 
  $Reply = $ping.send($server)


  if($Reply.status -like 'Success')
    {

    $Admin=[adsi]("WinNT://" + $server + "/$user, user")

    if($?) 
      {
       $Admin.SetPassword($newpwd)

     if($?)

      {Add-Content -path C:\Audit\logs\servers-reset.csv -Value "$server,  Succsess the $user password was changed. , $date"}

      else
        {Add-Content -path C:\Audit\logs\servers-reset.csv -Value "$server, Error: FAILED to change the password. , $date"}
      }  
      else
      {
      Add-Content -path C:\Audit\logs\servers-reset.csv -Value "$server, Error: The $user user account was not found on the server. , $date"}
      }    
      else
      {
      Add-Content -path C:\Audit\logs\servers-reset.csv -Value "$server, Error: Ping FAILED could not connect. , $date"
      }

1 个答案:

答案 0 :(得分:2)

如果要在抛出日志之后立即编写例外,则可以使用陷阱。在脚本中添加以下内容:

trap [Exception] {

    #Add message to log
    Add-Content -Path test.csv -Value "$server, $($_.Exception.Message), $(Get-Date)"

    #Continue script
    continue; 
}

这将记录所有例外(并非所有错误)。

如果您想要所有错误,可以使用$Error访问它们。这是一个包含会话期间(脚本)的每个错误的arraylist。第一项$Error[0]是最新错误。但是,这不是直接适合csv文件而不进行格式化的东西。