- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 C# 代码中从我的机器 A 建立与远程主机 B 的 session 。我正在为此使用运行空间 API。下面提供了代码片段
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
//constructing the vmname parameter here
vmname = useralias + DateTime.Now.ToString();
Pipeline pipeline = runspace.CreatePipeline();
string scripttext = "$secpasswd = ConvertTo-SecureString '222_bbbb' -AsPlainText –Force";
string scripttext1 = "$mycreds = New-object -typename System.Management.Automation.PSCredential('TS-TEST-09\\Administrator',$secpasswd)";
string scripttext2 = "$s = New-PSSession -ComputerName TS-TEST-09 -Credential $mycreds";
//not accepting session string here, only computername acceptable
**string scripttext3 = "Enter-PSSession -Session $s";**
//Command cmd = new Command(@"C:\mypath\helper.ps1", true);
//cmd.Parameters.Add("local_useralias", useralias);
//cmd.Parameters.Add("local_vmname", vmname);
//cmd.Parameters.Add("local_datastore", datastoredropdown.Text.ToString());
//cmd.Parameters.Add("local_architecture", architecturedropdown.Text.ToString());
pipeline.Commands.AddScript(scripttext);
pipeline.Commands.AddScript(scripttext1);
pipeline.Commands.AddScript(scripttext2);
pipeline.Commands.AddScript(scripttext3);
//pipeline.Commands.Add(cmd);
Collection<PSObject> results = pipeline.Invoke();
runspace.Close();
此代码预计将进入与机器 TS-TEST-09 的 session 并调用该机器上存在的脚本 helper.ps1(该部分在当前代码中被注释掉,因为我无法进入 session 与远程主机)。
现在的问题是我无法使用 -Session 参数(在 scripttext3 中突出显示)进入 session $s,但是我可以使用 -Computername 参数进入它。
我在 scripttext3 中使用 -Session 参数时得到的错误是:
at invokedSystem.Management.Automation.Internal.Host.InteralHost.GetIHostSupportsInteractiveSession()
at invokedSystem.Management.Automation. Internal.Host.InteralHost.PushRunspace(Runspace runspace)
at Microsoft.Powershel.Commands.EnterPSSessionCommand.ProcessRecord()
at System.Management.Automation.Cmdlet.DoProcessRecord()
at System.Management.Automation.CommandProcessor.ProcessRecord()
end of inner exception stack trace
这是否意味着我必须编写自定义 PSHost 并使用此参数添加对 Enter-PSSession cmdlet 的支持?
是否有任何替代方法可以使此命令起作用?
任何帮助将不胜感激。
谢谢,
马尼什
最佳答案
打开远程 session 的最简单方法是这样的:
string shell = "http://schemas.microsoft.com/powershell/Microsoft.PowerShell";
var target = new Uri("http://myserver/wsman");
var secured = new SecureString();
foreach (char letter in "mypassword")
{
secured.AppendChar(letter);
}
secured.MakeReadOnly();
var credential = new PSCredential("username", secured);
var connectionInfo = new WSManConnectionInfo(target, shell, credential);
Runspace remote = RunspaceFactory.CreateRunspace(connectionInfo);
remote.Open();
using (var ps = PowerShell.Create())
{
ps.Runspace = remote;
ps.Commands.AddCommand("'This is running on {0}.' -f (hostname)");
Collection<PSObject> output = ps.Invoke();
}
您还可以从远程运行空间实例创建远程管道,但新的 PowerShell
对象是一种更易于管理的方法(自 powershell v2 起)
在 powershell v3 中,您只需新建一个 WSManConnectionInfo
并设置 ComputerName
属性,因为其他属性采用与上述相同的默认值。不幸的是,这些属性在 v2 中是只读的,您必须像上面那样传入最小值。构造函数的其他变体将允许您使用 kerberos/negotiate/credssp 等进行身份验证。
-奥伊辛
关于powershell - 如何在 Powershell 中使用运行空间建立和进入远程 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913254/
我是一名优秀的程序员,十分优秀!