我正在尝试在 C# 代码中从我的机器 A 与远程主机 B 建立会话。我正在为此使用运行空间 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 的会话并调用该机器上现有的脚本 helper.ps1(该部分在当前代码中被注释掉,因为我无法进入与远程主机的会话)。
现在的问题是我无法使用 -Session 参数进入会话 $s(在 scripttext3 突出显示)但是我可以使用 -Computername 参数进入它。
在 scripttext3 中使用 -Session 参数时出现的错误是:
在调用System.Management.Automation.Internal.Host.InteralHost.GetIHostSupportsInteractiveSession()
在调用System.Management.Automation。Internal.Host.InteralHost.PushRunspace(运行空间运行空间)
在 Microsoft.Powershel.Commands.EnterPSSessionCommand.ProcessRecord()
在 System.Management.Automation.Cmdlet.DoProcessRecord()
在 System.Management.Automation.CommandProcessor.ProcessRecord()
内部异常堆栈跟踪结束
这是否意味着我必须编写一个自定义 PSHost 并使用此参数添加对 Enter-PSSession cmdlet 的支持?
有没有其他方法可以使这个命令起作用?
任何帮助都感激不尽。
谢谢,
马尼什