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


アニメ『月曜日のたわわ』

ずっと前に、どうしようもなく仕事で残業をしていた時、 おそらくねぎらいの言葉で、仕事好きだねえ、と言われたことがあります。
軽い気持ちで言ってたと思うのですが、そんな風に言われて最悪な気持ちになることが多かったです。 気持ちが伝わらない声かけよりも、たとえ戦力にならなくても無言で仕事を手伝ってくれる方が何倍も癒されます。

前回、こんな処理を作って再帰的にレジストリキーを取得しようとしましたが、

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	
}

そもそも/sオプションで全取得すれば簡単ですよね。

PS C:\Users\takk> reg query "HKEY_LOCAL_MACHINE\software\microsoft\powershell\1" /s

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
    Install    REG_DWORD    0x1

HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\PowerShellEngine
    ApplicationBase    REG_SZ    C:\Windows\System32\WindowsPowerShell\v1.0
    ConsoleHostAssemblyName    REG_SZ    Microsoft.PowerShell.ConsoleHost, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=msil
    ConsoleHostModuleName    REG_SZ    C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell.ConsoleHost.dll
    PowerShellVersion    REG_SZ    2.0
    PSCompatibleVersion    REG_SZ    1.0, 2.0
    RuntimeVersion    REG_SZ    v2.0.50727

HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds

HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds\Microsoft.PowerShell
    Path    REG_SZ    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps140
    Path    REG_SZ    C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\SQLPS.exe
    ExecutionPolicy    REG_SZ    RemoteSigned

HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds\ScriptedDiagnostics
    ExecutionPolicy    REG_SZ    Unrestricted

PS C:\Users\takk>

これをHKEYでフィルタリングして、

PS C:\Users\takk> reg query "HKEY_LOCAL_MACHINE\software\microsoft\powershell\1" /s | findstr HKEY
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\ShellIds\Microsoft.PowerShell
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps140
HKEY_LOCAL_MACHINE\software\microsoft\powershell\1\ShellIds\ScriptedDiagnostics
PS C:\Users\takk>

うわあ、めっちゃ簡単。最初からこうやっておけばよかったです。