0

サーバーのリストで管理者パスワードを変更するこのテスト スクリプトがあります。サーバーに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"
      }
4

1 に答える 1

2

例外がスローされた直後にログに書き込みたい場合は、トラップを使用できます。次のようなものをスクリプトに追加します。

trap [Exception] {

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

    #Continue script
    continue; 
}

これにより、すべての例外がログに記録されます(すべてのエラーではありません)。

すべてのエラーが必要な場合は、 を使用してアクセスできます$Error。これは、セッション (スクリプト) 中のすべてのエラーを含む配列リストです。最初の項目$Error[0]は最新のエラーです。ただし、これはフォーマットせずにcsvファイルに直接収まるものではありません。

于 2013-01-24T14:06:26.483 に答える