どうもミツシマです。

前回、「(Powershell)Windows10でスタートメニューのタイルをコマンドで一括削除する方法を検証してみた」を検証していましたが、今回は逆にコマンドでスタート画面に特定のアプリケーションをピン留めする方法を検証しました。

検証環境は以下の通り
PC:Windows10 1809


前回と違い今回はスムーズに作成出来たので、まずは出来たスクリプトから


完成したスクリプト(PutStartMenu.ps1)

#環境変数設定
$UserName = $env:USERNAME

#実際に「スタート画面にピン留め」したいショートカットのリストを入力.各ユーザーのAPPDATA下の場合は「$USername」を使用ください
#複数入力する際は、最後に[,]を入力すること ※だたし、最終行は不要
$FileFullPathArray = @(
"C:¥ProgramData¥Microsoft¥Windows¥Start Menu¥Programs¥Accessories¥Snipping Tool.lnk",
"C:¥Users¥$UserName¥AppData¥Roaming¥Microsoft¥Windows¥Start Menu¥Programs¥Accessories¥Internet Explorer.lnk"
)


#ショートカットをスタート画面にピン止めする
Function PutStartMenu($FileFullPath){
    if( Test-Path $FileFullPath ){
        $PathName = Split-Path $FileFullPath -Parent
        $FileName = Split-Path $FileFullPath -Leaf

        #Write-Host ('$PathName:' + $PathName)
        #Write-Host ('$FileName:' + $FileName)

        $Shell = new-object -com "Shell.Application"
        $TergetFolder = $Shell.Namespace( $PathName )
        $TergetItem = $TergetFolder.ParseName( $FileName )
        $Verb = $TergetItem.Verbs() | Where-Object{ $_.Name -like "スタートにピン留めする*" }
        $Verb.DoIt()
    }
}


for($i = 0; $i -lt $FileFullPathArray.Count; $i++){

    #Write-Output ("count:"+ $i )
    #Write-Output $FileFullPathArray[$i]
    PutStartMenu $FileFullPathArray[$i]

}


〜解説〜

今回使用するのは「Shellスクリプト」である。簡単に説明するとWidnowsのエクスプローラ機能を呼び出してコマンド実行させるもの。GUI上でショートカットを右クリックして「スタートにピン留めする」という行為をコマンドで実行しているという感じ。
(注)ただし、この「スタートにピン留めする」という名前ですが、Windows10のフューチャーバージョンによって呼称が異なるようで、「スタートが画面にピン留めする」という表記のこともありましたので、実際に使用する場合は、右クリックで確かめた方がいい!!!

全体の流れとしては、ピン留めしたいアプリケーションのショートカットを環境変数(配列)に設定し、順番に上記Shellスクリプトよりスタート画面にピン留めしている。
※実際にピン留めしている処理は関数「PutStartMenu」としている。
その為、実際に使用する際には配列「FileFullPathArray 」にピン留めしたいアプリケーションのショートカットを設定するだけで使用可能。
上記スクリプト例では「スニッピングツール」と「Internet Explorer」の2つをピン留めしている内容になる。


更にカスタマイズしたい場合には、やはり「LayoutModification.xml」を作成して操作するしかないかなぁ〜〜と思う。
スポンサードリンク