我正面临一个令我头痛的问题(字面意思),我希望你能帮助我:
鉴于我的Powershell在我的应用程序之外的其他服务器上,在c#中,您可以创建一个" Powershell远程会话"通过定义WSManConnectionInfo
并在" runspace"中使用它创建
像:
var runspace = RunspaceFactory.CreateRunspace(WSManConnectionInfo);
但问题是:
当我们使用远程会话时,我们只能使用一些命令(并非所有命令都可用)。因此,您无法使用"导入模块"直接在远程会话中命令。
所以我问你是否可以帮我在c#(或只是一些提示)中找到解决方案,以便在远程会话中使用导入的模块。
我知道那里有很多解决方案(Pure Powershell命令),但我还不足以在c#中转换这些解决方案。
答案 0 :(得分:0)
嗯,我能够在远程会话中使用Import-Module,例如:
var connectionInfo = new WSManConnectionInfo(new Uri("http://foo.acme.com:5985"));
var runspace = RunspaceFactory.CreateRunspace(connectionInfo);
runspace.Open();
using (var powershell = PowerShell.Create())
{
powershell.Runspace = runspace;
powershell.AddScript("Import-Module PSCX");
var results = powershell.Invoke();
powershell.AddScript("Get-Uptime | Out-String");
results = powershell.Invoke();
foreach (var result in results)
{
Console.WriteLine(result);
}
runspace.Close();
}
输出:
Uptime LastBootUpTime
------ --------------
10.20:21:06.6432615 6/26/2014 6:29:00 PM
您的模块是否可能是特定于位的,可能是仅加载到x86 PowerShell会话中的32位模块?默认会话将为64位(假设远程OS为64位)。如果事实证明您的模块是特定于32位的,请连接到Microsoft.Powershell32端点。
var connectionInfo = new WSManConnectionInfo(new Uri("http://foo.acme.com:5985"), "http://schemas.microsoft.com/powershell/Microsoft.PowerShell32", PSCredential.Empty);