Scharping-FVB 11 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 Zitieren
BOfH_666 583 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? Zitieren
Scharping-FVB 11 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. Zitieren
BOfH_666 583 Geschrieben 24. Mai 2024 Melden Geschrieben 24. Mai 2024 Gerade eben schrieb Scharping-FVB: aber allgemein eben nicht. Zitieren
Dukel 460 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 Zitieren
BOfH_666 583 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 Zitieren
Scharping-FVB 11 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 Zitieren
Dukel 460 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 Zitieren
daabm 1.384 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 Zitieren
Scharping-FVB 11 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. Zitieren
BOfH_666 583 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 Zitieren
cj_berlin 1.394 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 Zitieren
daabm 1.384 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...) Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.