Wie bearbeiten Sie ein Powershell-Skript, um bei einem Fehler fortzufahren?

Wie bearbeiten Sie ein Powershell-Skript, um bei einem Fehler fortzufahren?

Ich habe dieses Skript geändert (https://gallery.technet.microsoft.com/scriptcenter/Create-HTML-Uptime-and-68e6acc0), um mehrere Server zu treffen, aber es generiert keinen Bericht, selbst wenn nur eines der Systeme ausgefallen ist. Wie ändere ich das Skript, damit es bei Fehlern weitermacht und am Ende den Bericht generiert? Der Fehler lautet:

Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
At C:\Users\user\Desktop\CheckDiskSpaceDomain\GetDiskDriveSpaceDomain.ps1:19 char:25
+      $os = Get-WmiObject <<<<  -class win32_OperatingSystem -cn $s
    + CategoryInfo          : InvalidOperation: (:) [Get-WmiObject], COMException
    + FullyQualifiedErrorId : GetWMICOMException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

You cannot call a method on a null-valued expression.
At C:\Users\user\Desktop\CheckDiskSpaceDomain\GetDiskDriveSpaceDomain.ps1:21 char:51
+        uptime = (get-date) - $os.converttodatetime <<<< ($os.lastbootuptime)}
    + CategoryInfo          : InvalidOperation: (converttodatetime:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Antwort1

Sieht so aus, als ob Sie das Problem haben, wenn Sie get-wmiObject ausführen. Nach diesem Aufruf schreiben Sie einfach

-ErrorAction "Resume"

Es sieht so aus, als ob „$OS“ tatsächlich der Nullwert ist. Sie möchten also vielleicht etwas wie das Folgende tun, um zu erkennen, ob „$s“ Null ist, und eine Entscheidung darüber zu treffen, was zu tun ist:

if ($OS -ne $null){ 
    $uptime = (get-date) - $os.converttodatetime 
    }
else {
    write-host " OS is null" 
     } 

Weitere Informationen zur Fehlerbehandlung:

http://blogs.msdn.com/b/kebab/archive/2013/06/09/an-introduction-to-error-handling-in-powershell.aspx

Antwort2

Versuchen Sie es mit -erroraction silentlycontinue

verwandte Informationen