[英]WMI recursive remote registry read
I am trying to list a remote registry folder on a domain. 我试图在域上列出一个远程注册表文件夹。 I was able to list keys but not recursively using WMI or OpenRemoteBaseKey. 我能够列出键但不能递归使用WMI或OpenRemoteBaseKey。 I would like to get Keyname, Values, Type on registry folders and subfolders for x32 & x64, preferably using WMI as I need other informations on clients. 我想在x32和x64的注册表文件夹和子文件夹上获取Keyname,Values,Type,最好使用WMI,因为我需要客户端上的其他信息。
Here is my code actually but needs to be improved : 这是我的代码,但需要改进:
foreach (string strComputer in arrComputers)
{
Console.WriteLine("==========================================");
Console.WriteLine(" Computer: " + strComputer);
Console.WriteLine("==========================================");
ManagementClass classInstance =
new ManagementClass("\\\\" + strComputer + "\\root\\DEFAULT",
"StdRegProv", null);
ManagementBaseObject inParams =
classInstance.GetMethodParameters("EnumValues");
inParams["sSubKeyName"] = "SOFTWARE\\IPS";
ManagementBaseObject outParams =
classInstance.InvokeMethod("EnumValues", inParams, null);
Console.WriteLine("Out parameters:");
Console.WriteLine("ReturnValue: " + outParams["ReturnValue"]);
Console.WriteLine("sNames: " + outParams["sNames"]);
Console.WriteLine("Types: " + outParams["Types"]);
}
Thanks in advance. 提前致谢。
I don't see any recursion in your code. 我没有在你的代码中看到任何递归。 Here is an example. 这是一个例子。 ParseKey will dump the values using 'ParseChildValues' before recursing on all child subkeys. 在递归所有子子键之前,ParseKey将使用'ParseChildValues'转储值。
using Microsoft.Win32;
...
/// <summary>
/// This method returns a list of registry values from a given key in .reg format.
/// </summary>
/// <param name="key">Registry key from which to obtain values.</param>
/// <returns>A CR-separated list of all the registry values for a given key.</returns>
private static string ParseChildValues(RegistryKey key)
{
if (key.IsNull())
return string.Empty;
StringBuilder sb = new StringBuilder();
foreach(string val in key.GetValueNames())
{
sb.AppendFormat("{0}=\"{1}\"", string.IsNullOrEmpty(val) ? "@" : val, key.GetValue(val));
sb.AppendLine();
}
return sb.ToString();
}
/// <summary>
/// Parses the SubKeys of a given RegistryKey.
/// </summary>
/// <param name="key">A registry key</param>
/// <returns>Lots of important data!</returns>
private static string ParseKey(RegistryKey key)
{
if (key.IsNull())
return string.Empty;
StringBuilder sb = new StringBuilder();
sb.AppendLine();
sb.AppendFormat("[{0}]", key.Name);
sb.AppendLine();
sb.Append(ParseChildValues(key));
foreach (var subKey in key.GetSubKeyNames())
{
sb.Append(ParseKey(key.OpenSubKey(subKey)));
}
return sb.ToString();
}
static void Main(string[] args)
{
// Dump the contents of HKEY_CLASSES_ROOT\*
Console.WriteLine("Getting the contents of HKCR\\* on the local machine");
RegistryKey localHKCR = Registry.ClassesRoot.OpenSubKey("*", RegistryKeyPermissionCheck.ReadSubTree);
Console.WriteLine(ParseKey(localHKCR));
// Dump the contents of HKEY_CLASSES_ROOT\* on a remote machine.
Console.WriteLine();
Console.WriteLine("Getting the contents of HKCR\\* via OpenRemoteBaseKey");
RegistryKey remoteHKCR = RegistryKey.OpenRemoteBaseKey(RegistryHive.ClassesRoot, "MACHINENAME");
Console.WriteLine(ParseKey(remoteHKCR.OpenSubKey("*", RegistryKeyPermissionCheck.ReadSubTree)));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.