gpt4 book ai didi

powershell - 如何在 Powershell 中使用运行空间建立和进入远程 session

转载 作者:行者123 更新时间:2023-12-02 07:07:59 25 4
gpt4 key购买 nike

我正在尝试在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com