Führen Sie Verknüpfungen wie Programme aus
-
09-06-2019 - |
Frage
Beispiel:Sie haben eine Verknüpfung s
Zu SomeProgram
im aktuellen Verzeichnis.
In cmd.exe
, du kannst Tippen s
und es wird das Programm starten.
In PowerShell tippen s
gibt:
The term 's' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again.
Wenn Sie tippen s.lnk
oder SomeProgram
, das Programm läuft einwandfrei.
Wie kann ich PowerShell so konfigurieren, dass Verknüpfungen genau wie Programme ausgeführt werden?
Lösung
Auf meinem Vista-System startet die Eingabe von S keine LNK-Datei, es sei denn, ich habe die Umgebungsvariable PATHEXT mit .lnk in der Liste festgelegt.Wenn ich es tue.S wird in cmd.exe funktionieren und ich muss .\S in Powershell ausführen.
Andere Tipps
Sie können eine Verknüpfung auch mithilfe des Cmdlets „invoke-item“ aufrufen.Wenn Sie beispielsweise „internet explorer.lnk“ starten möchten, können Sie den folgenden Befehl eingeben:
invoke-item 'Internet Explorer.lnk'
Alternativ können Sie auch den Alias verwenden
ii 'internet explorer.lnk'
Eine weitere coole Sache ist, dass Sie „invoke-item t.txt“ ausführen könnten und automatisch der Standard-Handler für *.txt-Dateien geöffnet würde, z. B. Notepad.
Notiz Wenn Sie eine Anwendung, app.exe, im aktuellen Verzeichnis ausführen möchten, müssen Sie tatsächlich den Pfad (relativ oder absolut) für die Ausführung angeben.„.\app.exe“ ist das, was Sie eingeben müssen, um die Anwendung auszuführen.
Nach dem Hinzufügen ;.LNK
bis zum Ende meines PATHEXT
Umgebungsvariable kann ich jetzt Verknüpfungen auch ohne das Vorhergehende ausführen ./
Notation.(Danke Bruceatk!)
Ich wurde auch von Stevens Vorschlag inspiriert, ein kleines Skript zu erstellen, das automatisch alle Verknüpfungen in meinem aliast PATH
(auch wenn ich vorhabe, bei der einfacheren Lösung zu bleiben ;).
$env:path.Split( ';' ) |
Get-ChildItem -filter *.lnk |
select @{ Name='Path'; Expression={ $_.FullName } },
@{ Name='Name'; Expression={ [IO.Path]::GetFileNameWithoutExtension( $_.Name ) } } |
where { -not (Get-Alias $_.Name -ea 0) } |
foreach { Set-Alias $_.Name $_.Path }
Ich glaube nicht, dass du das kannst.Möglicherweise ist es besser, häufig verwendete Befehle in einem Skript, das Sie über Ihr Profilskript aufrufen, mit Aliasnamen zu versehen.
Beispiel -
Set-Alias np c:\windows otepad.exe
Dann steht Ihnen Ihr kurzer, leicht einzugebender Name über die Befehlszeile zur Verfügung.
Zum einen ist die Abkürzung nicht „s“, sondern „s.lnk“.Z.B.Sie können eine Textdatei nicht öffnen (z. B. mit dem Editor), indem Sie „t“ eingeben, wenn der Name „t.txt“ lautet :) Technet sagt
Die PathExt -Umgebungsvariable definiert die Liste der von Windows NT überprüften Dateierweiterungen bei der Suche nach einer ausführbaren Datei.Der Standardwert von PATHEXT ist .COM;.EXE;.BAT;.CMD
Sie können Dot-Source verwenden, wie von anderen hier beschrieben, oder Sie können auch das Aufrufzeichen „&“ verwenden.Das bedeutet, dass PS Ihre Zeichenfolge als etwas zum Ausführen behandelt und nicht nur als Text.Dies könnte jedoch in einem Skript wichtiger sein.
Ich möchte hinzufügen, dass Sie alle Parameter AUSSERHALB der Anführungszeichen übergeben sollten (dieser hat mich zuvor gebissen). Beachten Sie, dass sich das „-r“ nicht in der in Anführungszeichen gesetzten Zeichenfolge befindet, sondern nur in der Exe.
& "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe" -r | out-null
Sie können jederzeit die Tab-Vervollständigung verwenden, um „s[TAB]“ einzugeben und die EINGABETASTE zu drücken. Dadurch wird der Vorgang ausgeführt.