Nul*_*ter 7 .net c# powershell
我正在尝试使用C#运行invoke-command cmdlet,但我无法找出正确的语法.我只想运行这个简单的命令:
invoke-command -ComputerName mycomp.mylab.com -ScriptBlock {"get-childitem C:\windows"}
Run Code Online (Sandbox Code Playgroud)
在C#代码中,我完成了以下操作:
InitialSessionState initial = InitialSessionState.CreateDefault();
Runspace runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.AddCommand("invoke-command");
ps.AddParameter("ComputerName", "mycomp.mylab.com");
ps.AddParameter("ScriptBlock", "get-childitem C:\\windows");
foreach (PSObject obj in ps.Invoke())
{
// Do Something
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到一个例外:
Cannot bind parameter 'ScriptBlock'. Cannot convert the "get-childitem C:\windows" value of type "System.String" to type "System.Management.Automation.ScriptBlock".
Run Code Online (Sandbox Code Playgroud)
我猜我需要在某处使用ScriptBlock类型,但不知道该怎么做.这只是一个简单的示例,真正的用例将涉及运行一个包含多个命令的更大的脚本块,因此任何有关如何执行此操作的帮助都将受到高度赞赏.
谢谢
Nul*_*ter 11
啊,ScriptBlock本身的参数需要是ScriptBlock类型.
完整代码:
InitialSessionState initial = InitialSessionState.CreateDefault();
Runspace runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.AddCommand("invoke-command");
ps.AddParameter("ComputerName", "mycomp.mylab.com");
ScriptBlock filter = ScriptBlock.Create("Get-childitem C:\\windows");
ps.AddParameter("ScriptBlock", filter);
foreach (PSObject obj in ps.Invoke())
{
// Do Something
}
Run Code Online (Sandbox Code Playgroud)
如果有人发现将来有用,请在此处给出答案
| 归档时间: |
|
| 查看次数: |
7565 次 |
| 最近记录: |