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 p
Skript öffnet die erste App, deren Name Ihrem Wert entspricht.
(Ü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 p
können Sie mit der Funktion nach Apps suchen, deren Name mit dem AppName
Parameter beginnt . Dann Register-ArgumentCompleter
fügen wir alle App-Namen zur Liste der möglichen Werte für hinzu AppName
.