.ps1ファイルを実行するショートカットを作るスクリプト

PoweShell コンピュータ
PowerShell

Powrshellスクリプトのスクリプトファイル(拡張子.ps1)はエクスプローラからダブルクリックで実行することが出来ません。
powersehll.exeから実行する分には何にも困らないのですがGUIアプリっぽくファイルをドラック&ドロップしてスクリプトを実行すると意外と便利な場面もあります。

対策の一つとして「パス省略..\powershell.exe -File "スクリプトのパス"」とショートカットを作れば、ダブルクリックやドラック&ドロップでスクリプトを実行してくれます。.ps1ファイルごとショートカットを作るのも面倒なので、ショートカットを作るスクリプトを作りました。

初めにpowersehll.exeでスクリプトを引数無しで実行するとエクスプローラーの「送る」に「ps1ショートカット作成」のメニューが追加されます。
あとはエクスプローラでショートカット化したい.ps1ファイルを選択し「右クリック」「送る」「ps1ショートカット作成」でショートカットが同じフォルダにデスクトップに作成されます。

スポンサーリンク

スクリプト

<#
.SYNOPSIS
.psのショートカットを作成
 はサポートしていません

.DESCRIPTION
送るに「psショートカット作成」を追加します。

.EXAMPLE
.\PsToLink.ps1 # 引数無し
インストールモード
送るに「ps1ショートカット作成」を追加します。

.EXAMPLE
.\PsToLink.ps1 .psファイルのパス
ショートカット作成

.PARAMETER Args[0]
.psファイルのパス

#>


$ErrorActionPreference = "STOP"



$PowershellPath = Join-Path $PSHOME "powershell.exe"

if (0 -eq $Args.Length) {
    # インストール
    $TargetPath = Join-Path ([Environment]::GetFolderPath('sendto')) "\ps1ショートカット作成.lnk"
    $ScriptDirectory = Split-Path $PSCommandPath -Parent

    $WSH = New-Object -ComObject WScript.Shell
    $Shortcut = $WSH.CreateShortcut($TargetPath)
    $Shortcut.TargetPath = $PowershellPath
    $Shortcut.Arguments = "-NoExit -File """ + $PSCommandPath + """"
    $Shortcut.IconLocation = ($PowershellPath + ",0")
    $Shortcut.Description = "ps1ファイルを実行するショートカット"
    $Shortcut.WorkingDirectory = $ScriptDirectory
    $Shortcut.Save()

    exit
}

# メインルーチン

$ScriptPath = $Args[0]
$ScriptDirectory = Split-Path $ScriptPath -Parent

$TargetPath = Join-Path ([Environment]::GetFolderPath("Desktop")) ([System.IO.Path]::GetFileNameWithoutExtension($ScriptPath) + ".lnk")

$WSH = New-Object -ComObject WScript.Shell
$Shortcut = $WSH.CreateShortcut($TargetPath)
$Shortcut.TargetPath = $PowershellPath
$Shortcut.Arguments = "-NoExit -File """ + $ScriptPath + """"
$Shortcut.IconLocation = ($PowershellPath + ",0")
$Shortcut.Description = "ps1ファイルを実行するショートカット"
$Shortcut.WorkingDirectory = $ScriptDirectory
$Shortcut.Save()

このスクリプトで作成したショートカットはエラーメッセージを見えるようにするために、終了後もコンソールが表示されたままに成ります。終了後コンソールを閉じるようにする場合は$Shortcut.Arguments = “-NoExit -File….の-NoExitを削ってください。

コメント