You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何创建同时包含InitialSessionState与WSManConnectionInfo的Runspace

问题

需求:创建同时包含InitialSessionState和WSManConnectionInfo的Runspace,通过PowerShell API将执行策略设为Unrestricted,实现远程PowerShell脚本执行。

已编写代码:

InitialSessionState initialSessionState = InitialSessionState.CreateDefault();
initialSessionState.ExecutionPolicy = ExecutionPolicy.Unrestricted;

WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
connectionInfo.ComputerName = "VMD_CLEAN_RDP";
connectionInfo.Credential = creds;

当前创建Runspace的方式:

Runspace runspace = RunspaceFactory.CreateRunspace(initialSessionState);

疑问:

  • 创建该Runspace后能否添加connectionInfo?或先通过connectionInfo创建Runspace再添加initialSessionState?
  • 能否在创建PowerShell对象后直接添加远程计算机地址和凭据?示例设想如下:
PowerShell ps = PowerShell.Create()
{
  ps.AddRemoteComputer(remoteCompuuterName);
  ps.AddCredentials(creds)
}

此前尝试结果:用connectionInfo创建Runspace可连接远程但脚本无法运行;用initialSessionState创建的Runspace能运行脚本但仅在本地执行。


解答

关于Runspace的创建限制

Runspace一旦创建完成,无法再修改其关联的WSManConnectionInfo或InitialSessionState,必须在创建Runspace时同时传入两者。

正确的创建方式是使用RunspaceFactory.CreateRunspace的重载方法,同时传入连接信息和初始会话状态:

// 保留原有初始化代码
InitialSessionState initialSessionState = InitialSessionState.CreateDefault();
initialSessionState.ExecutionPolicy = ExecutionPolicy.Unrestricted;

WSManConnectionInfo connectionInfo = new WSManConnectionInfo();
connectionInfo.ComputerName = "VMD_CLEAN_RDP";
connectionInfo.Credential = creds;

// 同时传入两者创建远程Runspace
Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo, initialSessionState);
runspace.Open();

关于PowerShell对象的远程设置

PowerShell类没有AddRemoteComputer或AddCredentials这类直接方法。要实现远程执行,正确的方式是将PowerShell对象绑定到已创建的远程Runspace:

// 绑定到远程Runspace
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;

// 添加要执行的脚本内容
ps.AddScript(@"
    # 示例远程执行脚本
    Get-Process
");

// 执行并获取结果
var results = ps.Invoke();

此前尝试问题的原因

  • 仅用WSManConnectionInfo创建Runspace:缺少设置执行策略的InitialSessionState,远程主机默认执行策略可能阻止脚本运行,导致执行失败。
  • 仅用InitialSessionState创建Runspace:默认创建本地Runspace,因此只会在本地执行脚本。

内容的提问来源于stack exchange,提问作者VictorMiqueles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:00:19