PowerShellの.PS1ファイルの関連付け(その5)
(その4)は、コンソールの標準入力が取れますが、パイプやリダイレクションが駄目。
そこで、今度こそ究極の関連付けです。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1]
"EditFlags"=dword:00020000
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\DefaultIcon]
@="%SystemRoot%\\system32\\WindowsPowerShell\\v1.0\\powershell.exe,0"
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell]
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open]
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command]
@="CMD.EXE /S /V:ON /K \"SET ARGS=\"%1\" %*&powershell.exe -command \"$input | & !ARGS:\"='!\"\""
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\ShellEx]
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\ShellEx\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
処理結果が確認できるようPowerShellウィンドウを開いたままにしてます。
閉じるなら、/Kを/Cに変えます。
ただし、関連付けの変更だけでは駄目です。
Windows 2000/XPの初期バージョンには、以下の障害があります。
関連付けによるコンソールアプリの起動では、
標準出力のバイプ、リダイレクションやコンソールからの標準入力はOK。
標準入力のパイプやリダイレクションがエラー「ハンドルが無効です」になります。
詳細は以下を参照。
http://support.microsoft.com/kb/321788/
STDIN-STDOUT リダイレクトは、ファイルの関連付けから起動すると動作しないことがある
関連付けでなく、powershell.exeを明示的に起動すれば、パイプ入力やリダイレクション入力も可能です。
それが、前述のPS.CMDです。
また、修正済みバージョンでも、そのままでは、使えません。
以下の.REGファイルをレジストリに結合して、ポリシーを変更する必要があります。
変更後、システムの再起動が必要です。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"InheritConsoleHandles"=dword:00000001
« PowerShellの.PS1ファイルを起動するバッチファイル(その3) | トップページ | PowerShellで、列挙子(Enumerator)を配列(Array)に戻す。 »