我有大量的命令,不想改变它们。因此,我想将命令对象转换为代码块对象,并将它们的参数添加到调用中,以便以后在另一台计算机上执行它们。
最终结果是以下代码: string server=cpu1.com
应该将基础命令加载到脚本块中,以便稍后用于执行代码。
尝试将参数从基础移动到invokescript。
我根据从C#调用远程powershell命令撰写了我的答案,但是由于我无法为每个函数更改参数(有很多命令需要处理),因此我只想取出命令并执行它。
在查看@Keith hill的答案后进行编辑
Console.WriteLine(“创建调用”); RunspaceInvoke invoke = new RunspaceInvoke();
这个命令在本地执行时正常工作,有人知道原因吗?
最终结果是以下代码: string server=cpu1.com
public void ExecuteRemote(Command basis) {
RunspaceInvoke invoke = new RunspaceInvoke();
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeLine = runspace.CreatePipeline();
ScriptBlock s=basis.CommandText);//<<<<this does not work, how can I fix this?
Command invokeScript = new Command("Invoke-Command");
invokeScript.Parameters.Add("ComputerName", server);
invokeScript.Parameters.Add("scriptBlock", s);
invokeScript.Parameters.Join(basis.Parameters); // and this does not work either?
pipeLine.Commands.Add(invokeScript);
Collection<PSObject> commandResults = pipeLine.Invoke();
}
有人知道如何做到这一点吗?
我标记的两行代码无法正常工作(无法编译),我想知道如何修复它们。
ScriptBlock s=basis.CommandText);//<<<<this does not work, how can I fix this?
应该将基础命令加载到脚本块中,以便稍后用于执行代码。
invokeScript.Parameters.Join(basis.Parameters); // and this does not work either?
尝试将参数从基础移动到invokescript。
我根据从C#调用远程powershell命令撰写了我的答案,但是由于我无法为每个函数更改参数(有很多命令需要处理),因此我只想取出命令并执行它。
在查看@Keith hill的答案后进行编辑
Console.WriteLine(“创建调用”); RunspaceInvoke invoke = new RunspaceInvoke();
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Console.WriteLine("creating pipeline");
Pipeline pipeLine = runspace.CreatePipeline();
Console.WriteLine("creating scriptblock");
ScriptBlock s = ScriptBlock.Create(basis.CommandText);
Command invokeScript = new Command("Invoke-Command");
Console.WriteLine("adding parameter1");
invokeScript.Parameters.Add("ComputerName", "test1.com");
invokeScript.Parameters.Add("scriptBlock", s);
foreach (var p in basis.Parameters) {
invokeScript.Parameters.Add(p.Name, p.Value);
}
pipeLine.Commands.Add(invokeScript); Console.WriteLine("res");
Collection<PSObject> commandResults = pipeLine.Invoke();
当我尝试添加以下命令时,出现了找不到名称为“Name”的参数的错误: Command MaakActiveDirectoryOU = new Command("New-ADOrganizationalUnit");
MaakActiveDirectoryOU.Parameters.Add("Name", KlantNaam);
MaakActiveDirectoryOU.Parameters.Add("Path", WebConfigurationManager.AppSettings["SharedOU"].ToString());
ExecuteRemote2(MaakActiveDirectoryOU);
这个命令在本地执行时正常工作,有人知道原因吗?