Powershellスクリプトファイル(.ps1)はエクスプローラからダブルクリックで実行することは出来ませんが、ショートカットを作ることで実行することが出来ます。
この方法だとpowershell.exeのウィンドウ(コンソール)が表示されます。ウィンドウスタイルのオプションを設定することも出来ますが完璧に表示しない方法は無いようです。それでも通常は不都合が無いですし、コンソールが表示してくれた方が都合がよい場合もあります。
しかし、タスクスケジューラで実行する場合、唐突にウィンドウが現れるとさすがに邪魔です。それで、ウィンドウが表示されない他のスクリプト言語(VBScirpt)からpowersehllスクリプトを呼び出すスクリプトを作ってみました。
初めにpowersehll.exeでスクリプトを引数無しで実行するとエクスプローラーの「送る」に「VBS作成」のメニューが追加されます。
あとはエクスプローラでps1ファイルを選択し「右クリック」「送る」「VBS作成」で同じフォルダにVBScriptが作成されます。
スクリプト
<#
.SYNOPSIS
.ps1を呼び出すVBSスクリプトを生成
<CommonParameters> はサポートしていません
.DESCRIPTION
送るに「VBS作成」を追加します。
.EXAMPLE
.\PsToVBS.ps1 # 引数無し
送るに「VBS作成」を追加します。
.EXAMPLE
.\PsToVBS.ps1 .psファイルのパス
VBS作成
.PARAMETER Args[0]
.psファイルのパス
#>
$ErrorActionPreference = "STOP"
$PowershellPath = Join-Path $PSHOME "powershell.exe"
if (0 -eq $Args.Length) {
# インストール
$TargetPath = Join-Path ([Environment]::GetFolderPath('sendto')) "\VBS作成.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 = "VBS作成"
$Shortcut.WorkingDirectory = $ScriptDirectory
$Shortcut.Save()
exit
}
# メインルーチン
$ScriptPath = $Args[0]
$TargetPath = Join-Path (Split-Path $ScriptPath -Parent) ([System.IO.Path]::GetFileNameWithoutExtension($ScriptPath) + ".vbs")
if (Test-Path -LiteralPath $TargetPath) {
Remove-Item -LiteralPath $TargetPath
}
$VBScirpt = "Set Shell = CreateObject(""WScript.Shell"")`r`nShell.Run """ + $PowershellPath + " -File """"" + $ScriptPath + """"""",0,False"
Set-Content -LiteralPath $TargetPath -Value $VBScirpt
コメント