Scharping-FVB 11 Geschrieben 24. Mai Melden Teilen Geschrieben 24. Mai (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 von Scharping-FVB allgemein Halten eingefügt Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 24. Mai Melden Teilen Geschrieben 24. Mai 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 Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 24. Mai Autor Melden Teilen Geschrieben 24. Mai 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 Link zu diesem Kommentar
BOfH_666 577 Geschrieben 24. Mai Melden Teilen Geschrieben 24. Mai Gerade eben schrieb Scharping-FVB: aber allgemein eben nicht. Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 24. Mai Melden Teilen Geschrieben 24. Mai (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 von Dukel 1 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 24. Mai Melden Teilen Geschrieben 24. Mai (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 von BOfH_666 Zitieren Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 24. Mai Autor Melden Teilen Geschrieben 24. Mai 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 Link zu diesem Kommentar
Dukel 454 Geschrieben 24. Mai Melden Teilen Geschrieben 24. Mai (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 von Dukel Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 24. Mai Melden Teilen Geschrieben 24. Mai (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 von daabm 1 Zitieren Link zu diesem Kommentar
Scharping-FVB 11 Geschrieben 25. Mai Autor Melden Teilen Geschrieben 25. Mai 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 Link zu diesem Kommentar
BOfH_666 577 Geschrieben 25. Mai Melden Teilen Geschrieben 25. Mai (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 von BOfH_666 Zitieren Link zu diesem Kommentar
cj_berlin 1.312 Geschrieben 25. Mai Melden Teilen Geschrieben 25. Mai ...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 Link zu diesem Kommentar
daabm 1.354 Geschrieben 26. Mai Melden Teilen Geschrieben 26. Mai Aber bitte mit Write-Irgendwas davor (und Klammern um den Ausgabetext) und nicht einfach in die Pipe schieben (Nur so aus Gewohnheit...) Zitieren Link zu diesem Kommentar
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.