如何在非交互式 powershell 脚本中接受内联输入

问题描述 投票:0回答:1

我正在尝试将一个 powershell 脚本放在一起,我们可以将其用于商业 IT 监控解决方案(StableNet by Infosim.de)的一些自定义脚本。该产品具有一个巧妙的功能,可以以安全的方式将参数传递给脚本,并避免参数在 ps/任务管理器等系统工具中可见。该解决方案可以使用“--inline”参数调用脚本,而不是将它们作为命令行上的参数,该参数期望被调用的脚本通过内联参数设置读取所有其他参数。当使用内联参数时,运行脚本应该能够启动并等待调用代码提供以 CR/LF 分隔的参数。

我已经使用 C# 完成了一些代码,它只使用:

string host = Console.ReadLine(); string user = Console.ReadLine(); string pass = Console.ReadLine(); string filePath = Console.ReadLine();

这在 C# 中运行良好。但我还想制作一些 powershell 脚本以加快开发速度。但是,由于 StableNet 使用 -noninteractive 参数启动所有 powershell 脚本,我无法使用 Read-Host 调用来请求内联参数。

所以问题是,是否有人有任何好主意,如何使用 Powershell 脚本实现这些内联参数设置,并仍然使其作为非交互式脚本工作?

我已经根据

[System.Console]::OpenStandardInput().Read()
尝试了一些选项,但尚未成功。

powershell parameters parameter-passing inline
1个回答
0
投票

使用 automatic

$input
变量 访问提供给 PowerShell CLI 的 stdin 输入(对于 Windows PowerShell
powershell.exe,对于
PowerShell (Core) 7
pwsh)。

例如:

echo host1 user1 pass1 | powershell -noninteractive -c '$hostVar, $userVar, $passVar = @($input); [pscustomobject] @{ Host = $hostVar; User = $userVar; Pass = $passVar }'

输出:

Host  User  Pass
----  ----  ----
host1 user1 pass1
© www.soinside.com 2019 - 2024. All rights reserved.