Scharping-FVB 13 Geschrieben 24. Mai 2024 Melden Geschrieben 24. Mai 2024 (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 24. Mai 2024 von Scharping-FVB allgemein Halten eingefügt
BOfH_666 586 Geschrieben 24. Mai 2024 Melden Geschrieben 24. Mai 2024 vor 6 Minuten schrieb Scharping-FVB: Wie ist das in diesem Beispiel möglich? Wie wär's, das einfach mit einem "Test-Path" zu prüfen?
Scharping-FVB 13 Geschrieben 24. Mai 2024 Autor Melden Geschrieben 24. Mai 2024 Gerade eben schrieb BOfH_666: Wie wär's, das einfach mit einem "Test-Path" zu prüfen? Da haben wir uns überschnitten. Ja, in diesem Fall, aber allgemein eben nicht.
BOfH_666 586 Geschrieben 24. Mai 2024 Melden Geschrieben 24. Mai 2024 Gerade eben schrieb Scharping-FVB: aber allgemein eben nicht.
Dukel 468 Geschrieben 24. Mai 2024 Melden Geschrieben 24. Mai 2024 (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 24. Mai 2024 von Dukel 1
BOfH_666 586 Geschrieben 24. Mai 2024 Melden Geschrieben 24. Mai 2024 (bearbeitet) Ah ... jetzt weiß ich was Du meinst ... schon mal mit Try_Catch versucht? https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_try_catch_finally?view=powershell-7.4 bearbeitet 24. Mai 2024 von BOfH_666
Scharping-FVB 13 Geschrieben 24. Mai 2024 Autor Melden Geschrieben 24. Mai 2024 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
Dukel 468 Geschrieben 24. Mai 2024 Melden Geschrieben 24. Mai 2024 (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 24. Mai 2024 von Dukel
daabm 1.431 Geschrieben 24. Mai 2024 Melden Geschrieben 24. Mai 2024 (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 24. Mai 2024 von daabm 1
Scharping-FVB 13 Geschrieben 25. Mai 2024 Autor Melden Geschrieben 25. Mai 2024 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.
BOfH_666 586 Geschrieben 25. Mai 2024 Melden Geschrieben 25. Mai 2024 (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 25. Mai 2024 von BOfH_666
cj_berlin 1.508 Geschrieben 25. Mai 2024 Melden Geschrieben 25. Mai 2024 ...oder Du machst es mit der formatierten Ausgabe: $LinkName = 'BlaKeks' 'Es gab einen Fehler beim Anlegen des Links "{0}". Bitte manuell nacharbeiten.' -f $LinkName 1
daabm 1.431 Geschrieben 26. Mai 2024 Melden Geschrieben 26. Mai 2024 Aber bitte mit Write-Irgendwas davor (und Klammern um den Ausgabetext) und nicht einfach in die Pipe schieben (Nur so aus Gewohnheit...)
Empfohlene Beiträge
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 erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden