Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
捕获此Powershell脚本中的错误_Powershell_Try Catch - Fatal编程技术网

捕获此Powershell脚本中的错误

捕获此Powershell脚本中的错误,powershell,try-catch,Powershell,Try Catch,我有这个测试脚本来更改服务器列表上的管理员密码。 我已将脚本设置为在服务器无法ping'd或找不到帐户等情况下记录错误。但是除此之外,我希望捕获发生的任何其他错误,并将其添加到日志文件中。我知道您可以使用“尝试并捕获”来处理错误,但到目前为止还没有任何运气 有没有人能告诉我怎么做 这是剧本 $date = Get-Date $user = "Administrator" $newpwd = "MyPassword" $servers = gc C:\servers.txt

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

有没有人能告诉我怎么做

这是剧本

    $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"
      }

如果要在抛出异常后立即将异常写入日志,可以使用陷阱。在脚本中添加如下内容:

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文件,就无法将其直接放入csv文件。

谢谢你能告诉我在脚本中的位置吗?如果其他错误不正确,我想捕获异常错误并将其包含在日志中,这样我就知道出了什么问题。我不明白最后一个错误。要使用陷阱,请将代码放在脚本中,我更愿意将其放在开头,就在
param()
之后。在您开始使用诸如
Get Date
Get Content
之类的cmdlet之前,我会尝试一下……不要设置param(),脚本已发布。好的,我已根据需要对其进行排序。再次感谢格雷默