Skip to content

Instantly share code, notes, and snippets.

@pierre3
Last active August 20, 2016 08:11
Show Gist options
  • Save pierre3/b9e6d08f094bf4a63767 to your computer and use it in GitHub Desktop.
Save pierre3/b9e6d08f094bf4a63767 to your computer and use it in GitHub Desktop.
「最近使った項目」一覧を入力候補とする ArgumentCompleter
$recentItemsCompletion = {
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)
# "\" が含まれる場合は、通常のPath入力とみなし、独自の入力補完は行わない
# 例えば"C:\" と入力した場合など
if(([string]$wordToComplete).Contains("\") )
{
return;
}
# Recentフォルダから、最新50件のショートカット(*.lnk)ファイルを取得
$recentFolder = [System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::Recent);
$items = Get-ChildItem "$($recentFolder)\*.lnk" |
Sort-Object -Property LastWriteTime -Descending |
Select-Object -First 50;
$wsh = new-object -comobject WScript.Shell
foreach($item in $items)
{
try
{
# ショートカットの TargetPath を基に入力候補を作成し、ComoletionResultオブジェクトとして出力する。
$shortcut = $Wsh.CreateShortcut($item.FullName);
# 一覧に表示する文字列
$listItemText = Split-Path $shortcut.TargetPath -Leaf;
# 入力中の文字列$wordToCompleteとマッチしない項目はスキップ
if($listItemText -notmatch $wordToComplete)
{
continue;
}
# 実際に挿入される文字列
$completionText = '"' + $shortcut.TargetPath + '"';
# ツールチップに表示される文字列
$toolTip = $shortcut.TargetPath;
# 項目のタイプ(アイコン種別)
if(Test-Path $shortcut.TargetPath -PathType Container)
{
$resultType = [System.Management.Automation.CompletionResultType]::ProviderContainer;
}
else
{
$resultType=[System.Management.Automation.CompletionResultType]::ProviderItem;
}
# CompletionResult を出力
[System.Management.Automation.CompletionResult]::new($completionText, $listItemText,
$resultType,$toolTip);
}catch{ }
}
}
Register-ArgumentCompleter -CommandName Invoke-Item -ParameterName Path `
-ScriptBlock $recentItemsCompletion
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment