«前の日記(Wed, 20 May 2009 (平成21年)) 最新 次の日記(Fri, 22 May 2009 (平成21年))» 編集 RSS with tsukkomi RSS without tsukkomi

実験的「実験的日記」


Thu, 21 May 2009 (平成21年) [長年日記]

_ PowerShell でバージョンチェック

PowerShell だとレジストリの中身を手軽に読み出せるのでこんなことができることを知った。

PS C:\> foreach ( $key in $(dir HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | where {$_.getvalue("publisher") -like "*adobe*"}) ) { $key.getvalue("displayname"); $key.getvalue("displayversion") } # ここまで一行で

出力

Adobe Flash Player 10 ActiveX
10.0.22.87
Adobe Flash Player 10 Plugin
10.0.22.87
Adobe Reader 9.1.1 - Japanese
9.1.1

まずはこれがひとかたまり。

$(dir HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | where {$_.getvalue("publisher") -like "*adobe*"})

HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall を読み取って Publisher に adobe の文字が含まれているものだけを集めたものを作っているという解釈でいいはず。

これがわかるとあとはこう見ればいい。

foreach ( $key in ~ ) { $key.getvalue("displayname"); $key.getvalue("displayversion") }

抽出されたものを $key に放り込んで displayname と displayversion を表示させてる。

_ PowerShell でバージョンチェック・その二

条件が整っていればリモートマシンのレジストリも読めることがわかったので悪戦苦闘した結果。

$vendorName = 'adobe'
foreach ( $machineName in ('srv1', 'client1', 'client2') ) {
   "$machineName : "
   $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $machineName)
   $path = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'
   $regKey1 = $reg.OpenSubKey($path)
   foreach ( $subkey in $regKey1.GetSubkeyNames() ) {
      $regKey2 = $reg.OpenSubKey("$path\$subkey")
      if ($regKey2.getvalue("publisher") -like "*$vendorName*") {
         $regKey2.getvalue("displayname")
         $regKey2.getvalue("displayversion")
      }
   }
}

出力

srv1 :
client1 :
Adobe Flash Player 10 ActiveX
10.0.22.87
Adobe Flash Player 10 Plugin
10.0.22.87
Adobe Reader 9.1.1 - Japanese
9.1.1
client2 :

ただし、読めるかどうかの条件がどういうものだかまだ不明……

_ アドビ、四半期毎に定例パッチを配信へ

出る日がわかるようになるのはありがたい。Apple もはっきりさせてくれないかな。

目次

«前の日記(Wed, 20 May 2009 (平成21年)) 最新 次の日記(Fri, 22 May 2009 (平成21年))» 編集