Jump to content

Prüfen, ob ein Befehl erfolgreich ausgeführt wurde


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben (bearbeitet)

Liebes Forum,

 

ich erstelle einen Shortcut:

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("\\fs1\drive-i\scharping\Scans.lnk")
$Shortcut.TargetPath = "\\fs1\scan2file\$user"
$Shortcut.Save()

Sollte der letzte Befehl (das Speichern) scheitern, hätte ich das gerne behandelt, es soll also in einer Variablen gespeichert werden, ob der erfolgreich war, also $true oder $false.

Ich könnte für dieses Beispiel einfach mit "TestPath" prüfen, ob der Link existiert, aber ich möchte das gerne allgemein halten, um diese Prüfung auf Ausführung auch für andere Befehle nutzen zu können.

Wie ist das allgemein möglich?

 

Viele Grüße

Davorin

bearbeitet von Scharping-FVB
allgemein Halten eingefügt
Geschrieben (bearbeitet)

Informiere dich über try/catch.

Außerdem gibt es z.B. diverse Variablen $? / $error -> https://www.msxfaq.de/code/powershell/pserrhandling.htm

 

PS > $?
True
PS > 2/0
Es wurde versucht, durch 0 (null) zu teilen.
In Zeile:1 Zeichen:1
+ 2/0
+ ~~~
    + CategoryInfo          : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException

PS > $?
False
PS > $error
Es wurde versucht, durch 0 (null) zu teilen.
In Zeile:1 Zeichen:1
+ 2/0
+ ~~~
    + CategoryInfo          : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException

 

bearbeitet von Dukel
  • Like 1
Geschrieben
vor 5 Minuten schrieb Dukel:

Informiere dich über try/catch.

Das funktioniert hier nicht, habe ich als erstes versucht.

try {
	$Shortcut.Save() -erroraction stop
}

Erroraction wird nicht (an)erkannt:

+     $Shortcut.Save() -erroraction stop
+                      ~~~~~~~~~~~~
Unexpected token '-erroraction' in expression or statement.

Ich habe das jetzt so gelöst:

    $ErrorActionPreference = "SilentlyContinue"

    $WshShell = New-Object -comObject WScript.Shell
    $Shortcut = $WshShell.CreateShortcut("\\fs2\drive-i\$user\$LinkName.lnk")
    $Shortcut.TargetPath = "\\fs1\scan2file\$user"
    $LinkName = $Shortcut.FullName
    $LinkLocation = $Shortcut.TargetPath
    $Shortcut.Save()
    
    if($?) {
        Write-Host "Link ""$LinkName"" wurde im Pfad ""$LinkLocation"" angelegt." -ForegroundColor green
    }
    else {
        Write-Host "Es gab einen Fehler beim Anlegen des Links ""$LinkName"". Bitte manuell nacharbeiten." -ForegroundColor Red
    }

Mit if ($?) wird geprüft, ob $Shortcut.save() $true war und entsprechend reagiert.

 

Vielen Dank für die Anregungen und Hilfen :-)

Geschrieben (bearbeitet)

Try Catch geht nur, wenn das, was du ausführst, eine Exeption wirft.

In deinem Fall brauchst du $?, aber du wolltest das generell wissen -> Try/Catch um Exceptions abzufangen.

 

EDIT: Du brauchst bei einfachen Variablen keine Doppelten Quotes:

Write-Host "Es gab einen Fehler beim Anlegen des Links $LinkName. Bitte manuell nacharbeiten."

 

bearbeitet von Dukel
Geschrieben (bearbeitet)

WSH-Objekte schmeißen eine Terminating Exception - bei mir zumindest:

Try {
    $WshShell = New-Object -comObject WScript.Shell
    $Shortcut = $WshShell.CreateShortcut("$env:temp\Blubb\Scans.lnk")
    $Shortcut.TargetPath = "\\fs1\scan2file\$user"
    $Shortcut.Save()
} Catch {
    $MyError = $_
    Write-Host "Message: $( $MyError.Exception.Message )"
    Write-Host "HResult: $( $MyError.Exception.HResult )"
}

 

Was Du mit dem HResult anfängst, bleibt dann Dir überlassen :-)

bearbeitet von daabm
  • Like 1
Geschrieben
vor 19 Stunden schrieb Dukel:

EDIT: Du brauchst bei einfachen Variablen keine Doppelten Quotes:

Write-Host "Es gab einen Fehler beim Anlegen des Links $LinkName. Bitte manuell nacharbeiten."

 

Der Inhalt der Variable soll aber in Anführungszeichen ausgegeben werden ;-)

Ich meine, dass es da noch etwas technischeres gibt, fällt mir aber gerade nicht ein.

Geschrieben (bearbeitet)
vor 57 Minuten schrieb Scharping-FVB:

Der Inhalt der Variable soll aber in Anführungszeichen ausgegeben werden ;-)

 .... nur die Variable oder der ganze Text?

 

Wenn Du innerhalb von Anführungszeichen Anführungszeichen ausgeben möchtest, musst Du sie einfach "escapen". 🤷🏼‍♂️

 

Das geht entweder mit Backticks oder Du verdoppelst sie ... 

 

$LinkName = 'BlaKeks'
"Es gab einen Fehler beim Anlegen des Links `"$LinkName`". Bitte manuell nacharbeiten."
"Es gab einen Fehler beim Anlegen des Links ""$LinkName"". Bitte manuell nacharbeiten."

 

Edit: 

 

... oder Du nimmst einfache Anführungszeichen  ...

 

"Es gab einen Fehler beim Anlegen des Links '$LinkName'. Bitte manuell nacharbeiten."

 

bearbeitet von BOfH_666
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...