我有问题通过C#传递参数到PowerShell
我收到以下异常:
"由于主机程序或命令类型不支持用户交互而提示用户失败的命令.尝试支持用户交互的主机程序,例如Windows PowerShell控制台或Windows PowerShell ISE,并从命令中删除与提示相关的命令不支持用户交互的类型,例如Windows PowerShell工作流"
CS:
private static void RunPowershellScript(string scriptFile, string scriptParameters)
{
string scriptParameters = "param1 param2";
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open();
RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
Pipeline pipeline = runspace.CreatePipeline();
Command scriptCommand = new Command(scriptFile);
Collection<CommandParameter> commandParameters = new Collection<CommandParameter>();
foreach (string scriptParameter in scriptParameters.Split(' '))
{
CommandParameter commandParm = new CommandParameter(null, scriptParameter);
commandParameters.Add(commandParm);
scriptCommand.Parameters.Add(commandParm);
}
pipeline.Commands.Add(scriptCommand);
Collection<PSObject> psObjects;
psObjects = pipeline.Invoke();
}
Run Code Online (Sandbox Code Playgroud)
PS:
Function Foo ($arg1, $arg2)
{
Write-Host $arg1
Write-Host $arg2
}
Foo $args[0] $args[1]
Run Code Online (Sandbox Code Playgroud)
我在这里失踪了什么?我怎么能做这个工作?
Rom*_*min 11
例外与参数无关.要么不使用需要实现(Write-Host包含)主机UI的命令,要么实现自己的自定义主机(PSHost)和此UI(PSHostUserInterface).以下是一个简单主机的示例(如果您选择这种方式,MSDN上还有更多内容):http:
//msdn.microsoft.com/en-us/library/windows/desktop/ee706559(v = vs.85)的.aspx
对于简单的任务,实现具有UI的主机可能太多了.您可以考虑简单地定义Write-Host具有相同参数的函数并实现它,以便它在您的特定情况下工作(例如,确实如此[Console]::WriteLine(...)).此函数应在脚本中定义,或以更好的方式以不同的方式为其提供,例如,在全局范围内调用另一个脚本.
PS如果您有自定义主机,则使用其中一个CreateRunspace()以主机实例作为参数的重载,以链接主机和运行空间.