gpt4 book ai didi

powershell - 使用参数在UNC路径上运行批处理文件,并在没有社区扩展的情况下将输出捕获到变量

转载 作者:行者123 更新时间:2023-12-02 23:28:10 26 4
gpt4 key购买 nike

我想运行以下命令:

pushd \\myServer\share\scripts
myBatchFile.bat param1 param2 "parameter 3"
popd

仅通过powershell启动。

注意:批处理文件的名称以及每个参数都保存在变量中。
function Escape-StringForCmd($a)
{
if(($a -like '*"*') -or ($a -like '* *'))
{
('"{0}"' -f ($a -replace '"','""'))
}
else
{
$a
}
}

$batch = "myBatchFile.bat"
$p1 = "param1"
$p2 = "param2"
$p3 = "parameter 3"

$batch = Escape-StringForCmd($batch)
$p1 = Escape-StringForCmd($p1)
$p2 = Escape-StringForCmd($p2)
$p3 = Escape-StringForCmd($p3)

pushd \\myServer\share\scripts

cmd.exe /c $batch $p1 $p2 $p3
#above fails; no error returned; I think because cmd doesn't like the UNC path, so reverts to the system directory

Start-Process "cmd.exe" -ArgumentList "/c",$batch,$p1,$p2,$p3 -NoNewWindow -Wait -WorkingDirectory "\\myServer\share\scripts"
#above also fails; not sure why as looks healthy when running outside of ps1 file

popd

我也有兴趣捕获输出-尽管目前未运行批处理文件,但我将首先关注该文件。

我还没有尝试过ProcessStartInfo解决方案(请参阅下面的链接),因为它看起来像 start-process,或者只是 cmd.exe /c应该可以工作(当然,当我在ps1文件之外运行测试时,它已经起作用了),但是我会尝试尝试方法很快。

ProcessStartInfo解决方案: Powershell: Capturing standard out and error with Process object

最佳答案

您有理由不能为此使用invoke-expression吗?

$MyCmd = "$batch $p1 $p2 $p3 *>&1"

$ReturnOutput = Invoke-Expression $MyCmd
*>&1将来自StdErr和StdOut的所有输出放入输出流。

More info on redirection operators here.

关于powershell - 使用参数在UNC路径上运行批处理文件,并在没有社区扩展的情况下将输出捕获到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27364257/

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