我需要从 C# 代码中运行 PowerShell 脚本。那很容易。但是,我的 PowerShell 脚本包含几个 Read-Host 命令。通常,脚本执行将停止,用户应手动向 PowerShell 控制台输入一些值作为答案。但我需要的是从执行并控制该脚本流程的 C# 中的相同代码回答这些读取主机请求。换句话说,我需要我的脚本在某个时刻停止并等待来自 C# 代码的一些数据输入,然后获取它并继续执行。
我找到了如何从 C# 运行 PS,找到了如何在启动 PS 脚本时将参数或初始变量从 C# 传递到 PS 脚本,但我找不到任何方法如何使我的脚本等待来自主机应用程序的某些数据,接收它并在主机应用程序中继续执行,所有这些都是在脚本运行时而不是在其启动时执行。
您能否引导我找到可能有帮助的搜索方向或代码?
您可以致电WriteLine()
on the StandardInput
的过程。这将为一个人提供数据Read-Host
在脚本中。
为此请确保UseShellExecute
各自的ProcessStartInfo
被设定为false
和它的RedirectStandardInput
to true
.
例如
Process p = Process.Start(new ProcessStartInfo()
{
FileName = "powershell",
Arguments = @"C:\Users\Konstantin\ps.ps1",
UseShellExecute = false,
RedirectStandardInput = true,
});
p.StandardInput.WriteLine("abc");
将向第一个提供“abc”Read-Host
脚本的C:\Users\Konstantin\ps.ps1
.
如果还有更多Read-Host
s call WriteLine()
再次。或者您可以使用字符串连接StandardInput.NewLine
只需使用Write
。例如
p.StandardInput.Write("abc" + StandardInput.NewLine + "xyz" + StandardInput.NewLine);
将为第一个提供“abc”,为第二个提供“xyz”Read-Host
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)