Powershell-Verknüpfung zum Starten häufig verwendeter Anwendungen

491
Rob M

Es gibt wahrscheinlich ein paar Dutzend Apps, die ich täglich verwende. Dies sind Apps, die nicht "installiert" sind, sondern sich irgendwo im Dateisystem befinden. Das Starten eines dieser Programme umfasst Folgendes:

e: cd \PortableApps\FileZillaPortable FileZillaPortable.exe 

(Nein, nicht alle sind "portableapps", daher kann das Problem mit dem tragbaren Apps-Launcher nicht gelöst werden. Ich neige jedoch dazu, sie in den Ordner "PortableApps" zu stecken.) Ich möchte einen schnelleren Zugriff auf diese Komponenten . Ich könnte eine Tonne Batch-Dateien irgendwo in den Pfad legen, aber was für ein Durcheinander!

Da ich ständig ein Powershell-Fenster verwende, dachte ich, es wäre schön, eine Verknüpfung zu haben, die meine Apps startet.

Wie kann ich eine einfache Verknüpfung erstellen, die für alle diese Apps geeignet ist?

0

2 Antworten auf die Frage

1
Rob M

Ich habe das folgende Skript zu meinem Profil hinzugefügt. Jetzt müssen Sie an einer Powershell-Eingabeaufforderung nur noch p (space) (ctrl-space)den Namen der Anwendung eingeben. Oder ich kann tippen p -AppName. (Komplement erscheint nach dem Drücken der Leertaste) Beachten Sie, dass Sie nicht den vollständigen Namen eingeben müssen. Das pSkript öffnet die erste App, deren Name Ihrem Wert entspricht.

Beispiel eines Vervollständigers

(Übrigens habe ich LICECap verwendet, um das animierte GIF zu erstellen.)

Dies ist mein erster Durchlauf. Verbesserungsvorschläge wären willkommen.

Für Ihre Verwendung müssen Sie lediglich Ihre Pfade zu dem Array mit den entsprechenden Informationen hinzufügen.

$Global:approots = @( "E:\PortableApps", ($env:USERPROFILE+"\Downloads") ) if (-not (Test-Path ($PSScriptRoot+"\AppShortcuts.txt"))) { $approots | %{ $approot = $_ dir -Recurse ($approot+"\*.exe") |  %{ $_.Name.Remove($_.Name.LastIndexOf(".")) + "`t" + $_.FullName }  } | sort | Out-File -FilePath ($PSScriptRoot+"\AppShortcuts.txt") }  function global:p { <# .SYNOPSIS  Launch a portable app. .DESCRIPTION Launches a portable app whose name starts with the supplied parameter. .EXAMPLE p filezil .PARAMETER PartialFileName The beginning of the name of a portable app's EXE file #>  [CmdletBinding()] Param($AppName="start.exe")  process { if (-not (Test-Path ($PSScriptRoot+"\AppShortcuts.txt"))) { $approots | %{ $approot = $_ dir -Recurse ($approot+"\*.exe") |  %{ $_.Name.Remove($_.Name.LastIndexOf(".")) + "`t" + $_.FullName }  } | sort | Out-File -FilePath ($PSScriptRoot+"\AppShortcuts.txt") }  gc ($PSScriptRoot+"\AppShortcuts.txt") | ?{ $_.Substring(0,$_.IndexOf("`t")).StartsWith($AppName) }| select -first 1 | %{ start ($_.SubString($_.IndexOf("`t")+1)) } } } Register-ArgumentCompleter -CommandName 'p' -ParameterName 'AppName' -ScriptBlock { # learned this from icklicksick on https://www.reddit.com/r/PowerShell/comments/5nqw4m/adding_tabcompletion_to_your_powershell_functions/ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter) gc ($PSScriptRoot+"\AppShortcuts.txt") | %{$val=$_.Substring(0,$_.IndexOf("`t"));[System.Management.Automation.CompletionResult]::new($val, $val, 'ParameterValue', $val)} } 

Der Kern dieses Codes besteht darin, eine Textdatei zu erstellen, die eine Liste mit Anwendungsnamen und deren vollständigen Pfaden enthält. (tabulatorbegrenzt) Dann pkönnen Sie mit der Funktion nach Apps suchen, deren Name mit dem AppNameParameter beginnt . Dann Register-ArgumentCompleterfügen wir alle App-Namen zur Liste der möglichen Werte für hinzu AppName.

0
HackSlash

Zurück in DOS 3.2 Tage habe ich Batch-Dateien erstellt, um Verknüpfungen zu erstellen. Ich hatte einen ganzen Ordner und habe diesen Ordner dann in meine PATH-Variable eingefügt, damit ich sie wie Befehle von überall ausführen kann.

In LINUX werden häufig alle Binärdateien in einem /usr/binOrdner abgelegt und in die Variable PATH eingefügt. Das Äquivalent in Windows würde etwa Folgendes verwenden:

% Benutzerprofil% \ bin \

Legen Sie das in Ihren PFAD. Laden Sie dann alle Ihre Binaries dort ab. (Ich weiß, das klingt chaotisch, aber es wäre super einfach)

Auch ich habe diesen Ansatz verwendet. Alle EXE-Dateien in einem Ordner zu haben, wäre bei den meisten modernen Apps nicht praktisch. BAT / CMD-Dateien in einem Ordner (im "Pfad") würden funktionieren, aber es muss jedes Mal, wenn Sie ein Programm hinzufügen, eine andere Batchdatei erstellt werden. Natürlich ist dies auch bei meiner Methode der Fall. Daher ist es möglicherweise sinnvoll, die Datei appshortcuts.txt immer wieder neu zu erstellen. Oder planen Sie einen Job so, dass er neu erstellt wird, wenn neue Dateien in den angegebenen Pfaden gefunden werden. Ich denke, ich werde das Letztere hinzufügen. Rob M vor 7 Jahren 0
Mit 'meine Methode' meinte ich, dass Sie jedes Mal etwas zusätzliches tun müssen, wenn Sie ein Programm hinzufügen. In meinem Fall müssen Sie die Datei appshortcuts.txt löschen und neu erstellen. Rob M vor 7 Jahren 0
Genau. Der Vorteil von diskreten Dateien ist die Flexibilität des Befehlsnamens. anstelle von "p"Manchmal möchten Sie wirklich einen benutzerdefinierten Namen haben, den Sie eingeben können, z. B." scannen "statt" p netscan ". Die Erstellung von Batch-Dateien ist zu umfangreich, daher mache ich das nicht mehr. Ich erinnere mich an die TUI-Shell Programme, die früher nur App-Starter waren. HackSlash vor 7 Jahren 0
Sie können den "Alias" in der Datei "appshortcuts.txt" nach Belieben bearbeiten. Jede Zeile enthält den Namen, der in Autocomplete angezeigt wird, und (nach einem einzelnen "Tab") den Füllpfad zur ausführbaren Datei. Rob M vor 7 Jahren 0