Wie kann ich einer Windows-Verknüpfung in der Power Shell folgen?


11

Ich verwende Powershell und habe eine Verknüpfung zu meinem Zielverzeichnis im aktuellen Verzeichnis. Ich möchte das aktuelle Verzeichnis in das Verzeichnis ändern, auf das die Verknüpfung zeigt. Logischerweise möchte ich Folgendes tun:

cd your-files-here.lnk

und landen wo über diesen Punkten. Was ich stattdessen bekomme ist:

Set-Location : Cannot find path 'your-files-here.lnk' because it does not exist.
At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\pscx\Modules\CD\Pscx.CD.psm1:111 char:17
+                 Set-Location <<<<  $path -UseTransaction:$UseTransaction
    + CategoryInfo          : ObjectNotFound: (your-files-here.lnk:String) [Set-Location], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

Ich habe es versucht

ii your-files-here.lnk

Dies öffnet jedoch ein Explorer-Fenster, anstatt das aktuelle Verzeichnis zu ändern.

Antworten:


6

Sie können dies zu Ihrer Microsoft.PowerShell_profile.ps1Datei hinzufügen . Der cdBefehl funktioniert dann wie gewünscht.

remove-item alias:cd -force
function cd($target)
{
    if($target.EndsWith(".lnk"))
    {
        $sh = new-object -com wscript.shell
        $fullpath = resolve-path $target
        $targetpath = $sh.CreateShortcut($fullpath).TargetPath
        set-location $targetpath
    }
    else {
        set-location $target
    }
}

Ich musste "$ fullpath = Auflösungspfad $ target" in "$ fullpath = (Auflösungspfad $ target) .Path" ändern, damit es funktioniert.
Omaer

2
Außerdem habe ich festgestellt, dass die automatische Vervollständigung von PowerShell nach der Eingabe von "cd" für Nichtverzeichnisse nicht funktioniert. Dies bedeutet, dass ich den gesamten Namen der .lnk-Datei selbst eingeben muss.
Omaer

8

Leider macht es Windows nicht einfach, mit Verknüpfungen zu arbeiten. Das sollte funktionieren:

$sh = New-Object -COM WScript.Shell
cd $sh.CreateShortcut('your-files-here.lnk').TargetPath

Dies funktioniert, wenn das Ziel ein herkömmlicher lokaler Pfad ist, aber in mindestens einem Fall zeigt die Verknüpfung auf einen UNC-Pfad. In diesem Fall ist TargetPath leer.
Matthew Scouten

Das ist seltsam, ich habe .lnk-Verknüpfungen zu UNC-Pfaden und die .Targetpath-Eigenschaft enthält den Pfad. Ich habe sogar versucht, einen zu nehmen und den Zielpfad leer zu machen, und das würde nicht so retten.
EBGreen

Keine Ursache. Ich habe etwas anderes falsch gemacht. Funktioniert gut.
Matthew Scouten

Sie sollten uns sagen, was falsch war, damit zukünftige Generationen davon profitieren können!
uSlackr

1
Kurzum: CreateShortcut möchte einen absoluten Pfad.
Matthew Scouten

3

Ist die Verknüpfung eine Notwendigkeit?

Sie können hierfür einen Windows-Link verwenden. Siehe mklink /?Weitere Informationen zu Windows - Links / Knotenpunkten.


Ich bin nicht derjenige, der sich für Abkürzungen entschieden hat.
Matthew Scouten

1
Diese Antwort war für mich enorm hilfreich und die Lösung funktionierte reibungslos, falls sie das (Verknüpfungs-) Problem technisch nicht löst.
Twigmac
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.