C# 使用域上的本地凭据(远程计算机的)访问远程注册表

C# 使用域上的本地凭据(远程计算机的)访问远程注册表,c#,registry,credentials,C#,Registry,Credentials,标题有点长,但我将尝试解释: 我正在尝试从一台机器(连接到域)连接到另一台机器,该机器也连接到域,但丢失了kerberos的supportedencryptiontypes。 路径: HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policys\System\kerberos\parameters 基本上,当该值更改时,作为域管理员的我无法管理或访问此计算机,就好像此计算机不再位于域上一样。 但是当我把这个值改回

标题有点长,但我将尝试解释: 我正在尝试从一台机器(连接到域)连接到另一台机器,该机器也连接到域,但丢失了kerberos的
supportedencryptiontypes
。 路径: HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policys\System\kerberos\parameters

基本上,当该值更改时,作为域管理员的我无法管理或访问此计算机,就好像此计算机不再位于域上一样。 但是当我把这个值改回正确的值时(当我在本地与本地管理员用户连接时),我获得了完全的管理权限,看起来一切都很好

所以基本上我要做的是远程更改这个值,这意味着用它自己的本地管理员凭据连接到机器的注册表并更改回该值

我没有发布任何ATM代码,因为我没有,除了使用当前登录用户凭据远程访问注册表的正常方式


当然,如果需要的话,我会发布这段代码。

我在SO找到了一个很好的用于此目的的类:

我成功地用这门课写了一个快速示例:

...
using Microsoft.Win32;
using System.Net;
...

string hostName = 192.168.1.1;

using (new NetworkConnection(@"\\" + hostName + @"\admin$", new NetworkCredential(@"ad\administrator", "TopSecret")))
{
    using (RegistryKey remoteHklm = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, hostName))
    {
        using (RegistryKey serviceKey = remoteHklm.OpenSubKey("System\\CurrentControlSet\\Services", true))
        {
            if (serviceKey != null)
            {
                foreach (string key in serviceKey.GetSubKeyNames())
                {
                    Console.WriteLine(key);
                }
            }
        }

    }
}

我在这里找到了一个很好的课程:

我成功地用这门课写了一个快速示例:

...
using Microsoft.Win32;
using System.Net;
...

string hostName = 192.168.1.1;

using (new NetworkConnection(@"\\" + hostName + @"\admin$", new NetworkCredential(@"ad\administrator", "TopSecret")))
{
    using (RegistryKey remoteHklm = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, hostName))
    {
        using (RegistryKey serviceKey = remoteHklm.OpenSubKey("System\\CurrentControlSet\\Services", true))
        {
            if (serviceKey != null)
            {
                foreach (string key in serviceKey.GetSubKeyNames())
                {
                    Console.WriteLine(key);
                }
            }
        }

    }
}

您认为我可以使用此类重新启动远程计算机(通过传递本地管理员凭据)吗?不可以使用此类。您可以使用WMI。在(ShutdownSystem…)可以找到一个很好的(工作)示例。您认为我可以使用这个类(通过传递本地管理员凭据)重新启动远程计算机吗?不可以使用这个类。您可以使用WMI。可以在(关机系统…)找到一个好的(工作)示例