gpt4 book ai didi

powershell - 调用运算符(&)的语法问题

转载 作者:行者123 更新时间:2023-12-02 23:35:06 25 4
gpt4 key购买 nike

我正在研究通用/通用PS脚本,可用于在多台计算机上远程执行其他脚本。为此使用psexec。我知道还有其他方法可以做到,但是在我的情况下psexec似乎是最可靠的。

这是我最初尝试的内容的摘录:

SWITCH ($ScriptExt) {
'.bat' {$ShellCmd = 'CMD /C'}
'.cmd' {$ShellCmd = 'CMD /C'}
'.ps1' {$ShellCmd = 'powershell -ExecutionPolicy Unrestricted -File'}
[...]
}
}

Get-Content $PcList | ForEach-Object {

& "$PSScriptRoot\..\psexec.exe" \\$_.$Domain -u $Domain\$AdminUser -p $AdminPassword -h -i $ShellCmd $ScriptPath $ScriptArgs ## Does NOT work...

[...]
}

这不起作用:psexec每次都会出错,告诉我即使提供的路径看起来正确,它也不能在远程PC上运行程序。

还尝试在ForEach中添加一些引号:
& "$PSScriptRoot\..\psexec.exe" "\\$_.$Domain -u $Domain\$AdminUser -p $AdminPassword -h -i $ShellCmd $ScriptPath $ScriptArgs" ## Does NOT work...
...以及其他各种迭代方法来尝试使其正常工作。

经过更多的故障排除后,我发现是导致问题的原因是$ ShellCmd变量。如果我在ForEach中将该部分硬编码,如下所示:
& "$PSScriptRoot\..\psexec.exe" \\$_.$Domain -u $Domain\$AdminUser -p $AdminPassword -h -i powershell -ExecutionPolicy Unrestricted -File $ScriptPath $ScriptArgs

...虽然有效,但这是一个hack。

有人知道我的语法可能做错了吗?比较我的工作示例和非工作示例,除了我尝试在其中使用$ ShellCmd变量外,几乎没有什么区别。

最佳答案

我认为问题可能在于您违反了报价规则。

尝试分解命令并使用splatting:

$shell = 'powershell', '-ExecutionPolicy', 'Unrestricted', '-File'

& "$PSScriptRoot\..\psexec.exe" ... @shell $scriptPath $scriptArgs

作为附带说明,我强烈建议在psexec上使用WinRM和PSRemoting。

关于powershell - 调用运算符(&)的语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57631715/

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