我有一种简单的方法可以使用winrm从本地Windows机器连接到远程Windows机器。 以下是正在运行的powershell代码:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $ip -Force
$securePassword = ConvertTo-SecureString -AsPlainText -Force 'mypass'
$cred = New-Object System.Management.Automation.PSCredential 'Administrator', $securePassword
$cmd = {ls C:\temp}
Invoke-Command -ComputerName $ip -Credential $cred -ScriptBlock $cmd
我想知道如何在c#中完成确切的事情。
另外,如果有人告诉我是否有一种方法可以在c#winrm中发送文件,那将会更有帮助。
注意:本地计算机上只需要一个c#代码。远程机器已经设置好。
答案 0 :(得分:6)
- >将System.Management.Automation.dll添加到您的项目中。
WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
connectionInfo.ComputerName = host;
SecureString securePwd = new SecureString();
pass.ToCharArray().ToList().ForEach(p => securePwd.AppendChar(p));
connectionInfo.Credential = new PSCredential(username, securePwd);
Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo);
runspace.Open();
Collection<PSObject> results = null;
using (PowerShell ps = PowerShell.Create())
{
ps.Runspace = runspace;
ps.AddScript(cmd);
results = ps.Invoke();
// Do something with result ...
}
runspace.Close();
foreach (var result in results)
{
txtOutput.AppendText(result.ToString() + "\r\n");
}
答案 1 :(得分:3)
我有一篇文章介绍了在http://getthinktank.com/2015/06/22/naos-winrm-windows-remote-management-through-net/从.NET通过WinRM运行Powershell的简单方法。
如果你想复制它,代码就在一个文件中,它也是一个包含对System.Management.Automation的引用的NuGet包。
它自动管理可信主机,可以运行脚本块,还可以发送文件(实际上不支持,但我创建了一个解决方法)。返回始终是Powershell的原始对象。
// this is the entrypoint to interact with the system (interfaced for testing).
var machineManager = new MachineManager(
"10.0.0.1",
"Administrator",
MachineManager.ConvertStringToSecureString("xxx"),
true);
// will perform a user initiated reboot.
machineManager.Reboot();
// can run random script blocks WITH parameters.
var fileObjects = machineManager.RunScript(
"{ param($path) ls $path }",
new[] { @"C:\PathToList" });
// can transfer files to the remote server (over WinRM's protocol!).
var localFilePath = @"D:\Temp\BigFileLocal.nupkg";
var fileBytes = File.ReadAllBytes(localFilePath);
var remoteFilePath = @"D:\Temp\BigFileRemote.nupkg";
machineManager.SendFile(remoteFilePath, fileBytes);
如果有帮助,请标记为答案。我的自动部署已经使用了一段时间了。如果您发现问题,请留下评论。