4

REG_SZ次を使用して値を取得する際に奇妙な問題が発生しています。

(get-itemproperty -Path "Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player" -Name UninstallString).UninstallString

(get-itemproperty -Path "Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player" -Name UninstallString).UninstallString

get-itemproperty : Cannot find path 'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\VLC media player' because it
does not exist.
At line:1 char:2
+ (get-itemproperty -Path "Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (HKEY_LOCAL_MACH...LC media player:String) [Get-ItemProperty], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetItemPropertyCommand

この方法はREG_SZ問題なく別の方法で機能しますが、下の多くのキーを呼び出すUninstallと失敗します。

具体的には、次のように動作します。

(get-itemproperty -Path "Registry::HKEY_CURRENT_USER\Software\Microsoft\Command Processor" -Name autorun).AutoRun

私のシステムには両方のデータ エントリが存在し、regedit に表示されます。

ただし、非常に興味深いのは、次の結果には存在しないことです。

Get-ChildItem "Registry::HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\uninstall\"

さらにいくつかの「不足している」キーもあります。これは、私がよく知らない (HKEY_CLASSES_ROOT に似た) 奇妙なレジストリ名前空間の仮想化のように思えますか?

4

1 に答える 1

5

フォーラムのスレッドが私を答えに導いてくれました。

32 ビットおよび 64 ビット プログラムのレジストリの仮想化について説明します。

test-pathこの場合、キーが「見つからない」ため、追加のパスをチェックする必要があります ( 「エラーが発生する可能性のある」アクションを試す前に、条件付きでパスをチェックする必要があることに注意してください)。

PS > (dir HKLM:\SOFTWARE\wow6432node\Microsoft\Windows\CurrentVersion\Uninstall | measure).count
134
PS > (dir hklm:\software\microsoft\windows\currentversion\uninstall | measure).count
134

したがって、32 ビットの powershell.exe を実行している必要があります。

PS > [Environment]::Is64BitProcess
False 

また、HKEY_CLASSES_ROOT\Installer\ProductsWindows インストーラーでインストールされたプログラムを一覧表示する別の場所もあります。

この回答は、32 ビットと 64 ビットの powershell.exe に関して役立ちます

この問題の解決策は堅牢です。以前にリンクした機能を少し変更して、アクセスしやすくしました。

PS Macbook ProのブートキャンプでWindows 7を実行しています。奇妙なことに、実行する powershell.exe に関係なく、それは 32 ビットです。場所が の下にあるかどうかに関係なく、レジストリ キーが表示されませんwow6432node

于 2013-09-10T02:10:38.217 に答える