我正在尝试从我的计算机到计算机上的虚拟机运行 powershell 代码,但我不断收到此错误:
连接到远程服务器失败,并显示以下错误消息: WinRM 客户端无法处理该请求。如果认证 方案与 Kerberos 不同,或者客户端计算机不是 加入域,则必须使用 HTTPS 传输或 目标计算机必须添加到 TrustedHosts 配置中 环境。使用 winrm.cmd 配置 TrustedHosts。请注意,计算机 TrustedHosts 列表中的主机可能未经过身份验证。你可以获得更多 通过运行以下命令来获取有关该信息的信息:winrm help 配置。有关详细信息,请参阅 about_Remote_Troubleshooting 帮助主题。
我的代码:
string runasUsername = @"\aaa";
string runasPassword = "aaa";
SecureString ssRunasPassword = new SecureString();
foreach (char x in runasPassword)
ssRunasPassword.AppendChar(x);
PSCredential credentials = new PSCredential(runasUsername, ssRunasPassword);
var connInfo = new WSManConnectionInfo(new Uri("http://10.0.5.35/PowerShell"),
"http://schemas.microsoft.com/powershell/Microsoft.Exchange",credentials);
connInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
var runspace = RunspaceFactory.CreateRunspace(connInfo);
var domainName = "domainName.COM";
var password = "ActiveDirectoryPassword1234";
var ssPassword = new SecureString();
foreach (char c in password)
ssPassword.AppendChar(c);
var command = new Command("New-Mailbox");
command.Parameters.Add("FirstName", firstName);
command.Parameters.Add("LastName", lastName);
command.Parameters.Add("Password", ssPassword);
command.Parameters.Add("ResetPasswordOnNextLogon", false);
command.Parameters.Add("OrganizationalUnit", "NeumontStudents");
runspace.Open(); <--//error here
var pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(command);
var results = pipeline.Invoke();
runspace.Dispose();
我错过了什么?
如果客户端和远程计算机不位于同一域中,您有以下两个选项之一:
为了配置 WinRM 使用 HTTPS,请在两台计算机上以管理员身份打开 PowerShell 控制台并运行:
winrm quickconfig -transport:https
并在防火墙上打开端口5986:
netsh firewall add portopening TCP 5986 "WinRM over HTTPS"
或者,您可以通过运行以下命令将远程计算机添加为客户端上的受信任主机:
winrm set winrm/config/client @{TrustedHosts="10.0.5.35"}
winrm quickconfig
1.2.3.4
是主机的 IP 地址):
Set-Item wsman:localhost\client\trustedhosts -Value 1.2.3.4 -Concatenate
winrm quickconfig
以确保启用远程连接。