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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top