2016-05-17 6 views
0

Ich habe das folgende PowerShell-Skript, das einen API Rest GET-Aufruf durchführt.Test WebClient-API-Aufruf

$FullURL = "http://test.net/config/server/$($env:COMPUTERNAME)?format=test" 
$API = New-Object System.Net.WebClient 
$APIData = $API.DownloadString($FullURL) 
Set-Content -Value $APIdata -Path $APIDataFile -Force 

Der Aufruf ist abhängig vom lokalen Hostnamen im URI. Es ruft die Daten ab und exportiert sie als Backup in eine Textdatei. Das Problem - der API-Host ist ausgefallen oder es sind keine Informationen für den Host verfügbar, die alle Arten von Fehlern im Skript verursachen (dies ist ein kleiner Teil des Skripts, da es die Daten zu einer XML-Datei hinzufügt).

Wie füge ich Logik zum Skript hinzu, um den API-Aufruf zuerst zu testen, wenn das erfolgreich dann mit dem API-Aufruf fortgesetzt wird?

Es muss wegen Windows 2003-Hosts für PowerShell 2.0 funktionieren. API gibt einen Fehler 404 Code, wenn die Daten keine Daten sind.

Antwort

2

Sie müssen einen try/catch-Block verwenden. WebClient sollte eine Ausnahme auslösen, wenn der Download nicht erfolgreich ist. Versuchen Sie etwas wie:

$FullURL = "http://test.net/config/server/$($env:COMPUTERNAME)?format=test" 
try { 
    $API = New-Object System.Net.WebClient 
    $APIData = $API.DownloadString($FullURL) 
    Set-Content -Value $APIdata -Path $APIDataFile -Force 
} 
catch [Net.WebException] { 
    # Do whatever you want if an exception is raised  
} 
+0

Vielen Dank für Ihre Hilfe. Ich erhalte den folgenden Fehler - Typ [Webexception] kann nicht gefunden werden: Stellen Sie sicher, dass die Assembly, die diesen Typ enthält, geladen wird. Ich habe den Hostnamen in einen Namen geändert, der zum Testen nicht existiert. Irgendwelche Ideen –

+0

Siehe die Bearbeitung, verpasste die wichtige 'Net.' out – arco444

+0

Danke, fand die Net.webexception in einer anderen stackoverflow Frage. Perfekt funktioniert. Weißt du was [net.webexception] tut? nur für mein Lernen. Danke –