2017-09-05 2 views
1

Ich führe einen Befehl in Powershell durch VSTS, um Azure zu beeinflussen. Der Befehl funktioniert, aber es gibt einen Fehler nach. Die Parameter und die Verbindung funktionieren, wie die Tatsache zeigt, dass die Gruppe die Erlaubnis vom Befehl erhält. Ich denke, eine Problemumgehung ist, den Befehl in einen try-Block zu setzen, ihn ausführen zu lassen, und dann, wenn der Fehler auftritt, gehe zum catch-Block und beende ihn, ohne den Fehler zu werfen.Powershell try-Block funktioniert nicht mit VSTS Build

Wenn ich dieses Skript ausführen, bekomme ich immer noch den gleichen Fehler, wie der Try-Block ignoriert wird. Habe ich die Syntax falsch?

Try 
{ 
    New-AzureRmRoleAssignment -ObjectId "xxxx" -RoleDefinitionName $roleName -ResourceGroupName pentest-$featureName 
} 
Catch 
{ 
    Write-Output "Whoops" 
} 

Edit: Ich habe $ErrorActionPreference = "Stop" vor dem try-Block und den Fehler richtig erwischt.

+2

Überprüfen Sie den Wert von '$ ErrorActionPreference'. Wenn es nicht "Stop" ist, wird der "Fang" nicht ausgeführt. Lassen Sie uns wissen, ob das der Fall ist, und ich werde eine vollständigere Antwort schreiben. Es gibt einen anderen Fall für einige Cmdlets, die ohne extremere Schritte nicht "fangen". Das explizite Hinzufügen des Arguments "-ErrorAction Stop" erreicht das gewünschte Ergebnis auf Befehl von Befehlsbasis. –

+0

Ich habe auf dem Build-Server überprüft, es geht weiter – user3364161

Antwort

0

Der Testblock wurde wegen der falschen $ErrorActionPreference ignoriert. Das Ändern von "Fortfahren" zu "Beenden" hat es behoben.