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.

Matthew Scouten
quelle

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
    }
}
Kevin Panko
quelle
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
EBGreen
quelle
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.

uSlackr
quelle
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