2016-06-10 5 views
4

versucht, die automatischen Update-Einstellungen aus der Registrierung eines Remote-Servers zu ziehen. Aus irgendeinem Grund gibt es eine 0 zurück, obwohl eine manuelle Überprüfung des Schlüssels 1-4 ist. Was übersehe ich? Snippet unten:Automatische Updates über WMI

ManagementScope msAutoUpdateReg = new ManagementScope(@"\\" + remoteServer + @"\root\DEFAULT:StdRegProv", connection); 
msAutoUpdateReg.Connect(); 

ManagementClass ci = new ManagementClass(msAutoUpdateReg, new ManagementPath(@"DEFAULT:StdRegProv"), new ObjectGetOptions()); 
ManagementBaseObject inParams = ci.GetMethodParameters("GetDWORDValue"); 
inParams["hDefKey"] = 0x80000002; //HKLM 
inParams["sSubKeyName"] = @"Software\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update"; 
inParams["sValueName"] = "AUOptions"; 
ManagementBaseObject outParams = ci.InvokeMethod("GetDWORDValue", inParams, null); 
UInt32 auValue = (UInt32)outParams["uValue"]; 

if (auValue.ToString() != "0") 
{ 
    if (auValue == 1) 
    { 
     string currentSetting = "Keep my computer up to date has been disabled in Automatic Updates."; 
    } 

    if (auValue == 2) 
    { 
     string currentSetting = "Notify of download and installation."; 
    } 

    if (auValue == 3) 
    { 
     string currentSetting = "Automatically download and notify of installation."; 
    } 

    if (auValue == 4) 
    { 
     string currentSetting = "Automatically download and scheduled installation."; 
    } 
} 
else 
{ 
    string currentSetting = "Unknown"; 
} 
+0

Hat jemand irgendwelche Gedanken dazu? Ich habe jetzt mehrere Dinge mit den gleichen Ergebnissen ausprobiert. – Sparhawk

Antwort

1

Ich denke, ein Prozess der Beseitigung könnte hier helfen ...

1) geschieht dies nur auf einem Server oder Sie diese immer auf allen Servern? Wie wäre es mit Ihrer eigenen lokalen Maschine? Ist es eine Windows-Version? Zum Beispiel scheint es, dass mein Windows 10-Feld den von Ihnen gesuchten SubKey-Namen nicht anzeigt.

2) Erhalten Sie auch Null, wenn Sie den sValueName in "foo" ändern? Ist ein Wert von 0 ein Fehler?

3) Können Sie outParams überwachen und überprüfen, welche Werte zurückgegeben wurden?

4) Werden Sie durch UAC, Firewall oder andere Berechtigungsprobleme blockiert? Können Sie andere WMI-Befehle problemlos gegen diesen Server ausführen? Müssen Sie als Administrator ausführen, damit dies funktioniert?

5) Erhalten Sie weitere Ausnahmen oder Rückgabewerte? Ich schätze, Sie haben nur einen Teil des Codes hier geschrieben, also ist dieser Code in einem Versuch/Catch-Block?

Es tut uns leid, wenn dies entweder vage oder simpel klingt, aber ich denke, dass Sie sehen müssen, was funktioniert und was nicht zu sehen, wenn Sie ein Muster identifizieren können.

+0

Es empfiehlt sich, den Rückgabecode der Get-Operation zu überprüfen und sich die Fehlerreferenz für die API anzusehen ... –

+0

1. Erscheint auf allen Servern, selbst wenn der Schlüssel vorhanden ist. 2. Ich bin mir nicht sicher, wie ich den Wert auf foo ändern kann. 3. Der zurückgegebene Wert ist 0 4. UAC deaktiviert und Firewall deaktiviert. Ja, alle anderen WMI-Abfragen werden ohne Probleme zurückgegeben. Habe versucht, als Admin plus Administratoren der Server zu laufen. 5. Korrigieren Sie das Snippet. – Sparhawk

+0

Der Rückgabewert kommt mit 2 zurück. Ich konnte dies reproduzieren, indem ich den regkey über die Eingabeaufforderung aufruft. Standard-Eingabeaufforderung gibt Zugriff verweigert zurück. An Administrator erhöht gibt den Schlüssel ordnungsgemäß zurück. Was wäre der einfachste Weg, WMI zum Administrator für Remote-Server zu machen? – Sparhawk