« PowerShellの.PS1ファイルを起動するバッチファイル(その3) | トップページ | PowerShellで、列挙子(Enumerator)を配列(Array)に戻す。 »

2007年8月19日 (日)

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)に戻す。 »