Windowsコマンド(reg query)(その14)


アニメ『みるタイツ』
よくわからんです。

もう一度関数の確認してみます。

function get_regkey($key){
	reg query $key | % {
		if($_ -match "HKEY"){
			get_regkey $_
			echo $_
		}
	}
}

ん~、どこがバグっているのか、おかしなところが分かりません。

PS C:\Users\takk> get_regkey "HKEY_LOCAL_MACHINE\software\microsoft\powershell"
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\0409
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\PowerShellEngine
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\0409
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\0409
~省略~

でも、結果を見ると、同じレジストリキーが現れるのがおかしいですね。
そもそもreg queryの結果を再度使うことがおかしいのかも。
確認してみます。

PS C:\Users\takk> reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1
    Install    REG_DWORD    0x1
    PID    REG_SZ    89383-100-0001260-04309

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\0409
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds
PS C:\Users\takk>

あっ!
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1を指定したときに、
結果に、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1が出力されてしまってます。

過去に出現したレジストリキーの場合は除外する処理が必要ですね。

function get_regkey($arg){
	function proc($key){
		if($all[$key] > 0){
			echo "MATCH"
		 	return 0
		}
		$all[$key] = 1
		reg query $key | % {
			if($_ -match "HKEY"){
				proc $_
				echo $_
			}
		}
	}
	$all = @{}
	proc $arg	
}

連想配列を使って、こんな感じでよいでしょうか。

実行してみます。

PS C:\Users\takk> get_regkey "HKEY_LOCAL_MACHINE\software\microsoft\powershell"
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\0409
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\PowerShellEngine
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\0409
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\0409
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\PowerShellEngine
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\PowerShellEngine
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds\Microsoft.PowerShell
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps140

同じレジストリキーが表示されたので、まだバグってますね。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA