2016-05-05 18 views
0

いくつかのキーワードを検索し、サブキーが見つかった「ツリー」を削除したいパスの配列に基づいて、いくつかのキーをレジスタから削除しようとしています。検索と削除の試行でエラーが発生する

しかし、それを理解しようとした後、ダウン以下のスクリプトは、常にこのエラーが返されます。

It's not possible to call a method in an expression witha null value. 
At line:17 character:1 
+ $SubKeys=$RegisterKey.GetSubKeyNames() 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

Begin 
{ 
    $computername = $env:computername 
    "Script Started $(Get-Date)" 
    [array]$KeysToRemove="HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall","HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\Installer\\Products","HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\OnlineManagement","HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products","HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Components","HKEY_CLASSES_ROOT\\Installer\\Products" 
} 
Process 
{ 
    foreach($keys in $KeysToRemove) 
    { 
      if($KeysToRemove -eq "HKEY_CLASSES_ROOT\\Installer\\Products") 
      {$Register = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('ClassesRoot', $computername)} 
      else {$Register = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computername)} 

      $RegisterKey = $Register.OpenSubKey($keys) 

      $SubKeys=$RegisterKey.GetSubKeyNames() 

      foreach($key in $SubKeys){ 
       if($key.Contains('Microsoft\.Intune')) 
       { 
        "Key found: $key" 
        "Deleting it from register." 
        $Register.DeleteSubKeyTree($key) 
       } 
       else {"No key was found."} 
      } 

    } 
"Script Ended $(Get-Date)" 
} 

答えて

1

に気を付けるために物事のカップル:

を\\

PowerShellでは、文字列のエスケープ文字はバックスティック`で、バックスラッシュではありません\\をレジストリキーの文字列の中にエスケープしようとしないでください。完全に不要です。

HKEY_LOCAL_MACHINE

すでに基本キー(HKLMまたはHKCRのいずれか)を開設しましたので、あなただけのキーに相対パスを指定する必要がある - それが失敗した理由はこれが最も可能性が高いです。

$HKLMRegistry = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computername) 
$UninstallKey = $HKLMRegistry.OpenSubkey("SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall") 

# Now you can call GetSubKeyNames() 
$SubKeyNames = $UninstallKey.GetSubKeyNames() 

指定したキーにすべての値を反復処理したい場合は、GetValueNames()GetValue()メソッドを使用します

+0

この関数はSubKeyNamesを返します。どのようにしてこのサブキーのすべての値を検索できますか? – pulgalipe

+0

$ Value = $ UninstallKey.GetValue($ _) 実行するたびに、パラメータとして渡すべきいくつかの値を尋ねます。 次のパラメータの値を提供するパイプラインのコマンド1の位置1に レットますforeach-オブジェクト: ダウン以下メッセージ従っ プロセスを[0]: それをデバッグしようとしなし値は$上catchedされています値変数。 – pulgalipe

関連する問題