gpt4 book ai didi

windows - 将输出管道输出到由 [Diagnostics.Process]::Start 启动的 Windows 可执行文件?

转载 作者:可可西里 更新时间:2023-11-01 11:23:29 25 4
gpt4 key购买 nike

当从 [Diagnostics.Process]::Start 启动它们时,如何将 echo y 管道发送到 plink

$meProcessID = ([Diagnostics.Process]::Start("echo y | plink.exe", "$($hostName) -l $($uPwd.GetNetworkCredential().Username) -pw $($uPwd.GetNetworkCredential().Password) \`"echo '$($uPwd.GetNetworkCredential().Password)' | sudo -S '/home/someuser/somescript.sh'\`"")).Id

虽然有this它并没有真正回答我的问题,因为它询问的是从 powershell 调用 bash,而我的实际上是关于将一​​个值从标准输出传递给 Window 命令以绕过 Host-Read 类型的提示。

最佳答案

Ansgar Wiechers' helpful answer包含有效的解决方案和明智的安全警告。

使用 System.Diagnostics.Process instance.RedirectStandardInput = $true,并使用 .StandardInput 在流程开始后提供标准输入,为您提供更大的灵 active ,但在您的情况下,唯一需要的修改是将命令行作为参数(第二个参数)传递,通过选项 -c编程 cmd.exe(第一个参数)

  • [Diagnostics.Process]::Start()第一个参数只是可执行文件名/路径,不是完整的命令行。

  • 第二个参数接受包含参数的字符串以传递给可执行文件。

  • 由于您正在使用 shell 功能,即将 多个 命令与管道 连接,您必须使用 cmd .exe 作为可执行文件,并将您的管道作为 参数 传递给 cmd.exe/c 选项。

    • 您也可以使用 powershell.exe,但在这种简单的情况下,使用 cmd.exe 就足够了,而且速度更快。

这是一个简化的例子:

$meProcessID = ([Diagnostics.Process]::Start(
# Program to launch
'cmd',
# Arguments to pass
'/c echo 42 | powershell -nop -c "''stdin input: '' + $Input" & pause'
).Id

上面演示了标准输入 42powershell 进程视为这样 ($Input);它会打开一个新的控制台窗口,显示以下内容:

stdin input: 42
Press any key to continue . . .

关于windows - 将输出管道输出到由 [Diagnostics.Process]::Start 启动的 Windows 可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53695184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com