Start-Process ArgumentList 在 Powershell 中无法正常工作

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

我正在尝试使用 Powershell 中的 Start-Process 启动 java 进程。我正在传递 ArgumentList 中的参数,但似乎稍后会剪切参数列表。

这是我尝试过的:

Start-Process -FilePath java.exe -ArgumentList "-jar C:\Users\myUser\Desktop\agent.jar", "-jnlpUrl http://jenkins.mysecretdomain.com:8080/manage/computer/myJenkinsNode/jenkins-agent.jnlp", "-secret 1234567890abcdefgh1234567890abcdefgh1234567890abcdefgh1234567890", "-workDir 'e:\myFolder\Jenkins\'"
Start-Process -FilePath java.exe -ArgumentList @("-jar C:\Users\myUser\Desktop\agent.jar", "-jnlpUrl http://jenkins.mysecretdomain.com:8080/manage/computer/myJenkinsNode/jenkins-agent.jnlp", "-secret 1234567890abcdefgh1234567890abcdefgh1234567890abcdefgh1234567890", "-workDir 'e:\myFolder\Jenkins\'")

...以及一些类似的格式,但没有运气。 大多数时候,我可以看到 java.exe 进程启动了一秒钟的片段,在记录它之后,我可以看到它似乎在秘密密钥中间剪切了参数列表。我在这里做错了什么?

powershell start-process
2个回答
0
投票

感谢@Santiago Squarzon 解决了。


0
投票

根据评论,问题现在通过拆分参数和参数而不是将它们放在一起来解决,但对于将来,真正容易排除故障的方法是编译

print_argv.exe
取自jborean93的评论此处(请注意,它只会编译在 Windows PowerShell 5.1 中)。然后,您可以使用此命令非常轻松地进行故障排除,以显示分割参数之前和之后的内容的比较:

# This is before, using `@(...)` to make it more readable
.\print_argv.exe @(
    '-jar C:\Users\myUser\Desktop\agent.jar'
    '-jnlpUrl http://jenkins.mysecretdomain.com:8080/manage/computer/myJenkinsNode/jenkins-agent.jnlp'
    '-secret 1234567890abcdefgh1234567890abcdefgh1234567890abcdefgh1234567890'
    "-workDir 'e:\myFolder\Jenkins\'"
)

# [0] -jar C:\Users\myUser\Desktop\agent.jar
# [1] -jnlpUrl http://jenkins.mysecretdomain.com:8080/manage/computer/myJenkinsNode/jenkins-agent.jnlp
# [2] -secret 1234567890abcdefgh1234567890abcdefgh1234567890abcdefgh1234567890
# [3] -workDir 'e:\myFolder\Jenkins\'

如您所见,这被解析为 4 个参数,而不是分开参数和实参:

# This is after, using `@(...)` to make it more readable
.\print_argv.exe @(
    '-jar'
    'C:\Users\myUser\Desktop\agent.jar'
    '-jnlpUrl'
    'http://jenkins.mysecretdomain.com:8080/manage/computer/myJenkinsNode/jenkins-agent.jnlp'
    '-secret'
    '1234567890abcdefgh1234567890abcdefgh1234567890abcdefgh1234567890'
    '-workDir'
    'e:\myFolder\Jenkins\'
)

# [0] -jar
# [1] C:\Users\myUser\Desktop\agent.jar
# [2] -jnlpUrl
# [3] http://jenkins.mysecretdomain.com:8080/manage/computer/myJenkinsNode/jenkins-agent.jnlp
# [4] -secret
# [5] 1234567890abcdefgh1234567890abcdefgh1234567890abcdefgh1234567890
# [6] -workDir
# [7] e:\myFolder\Jenkins\

这被解析为 8 个参数,这解释了为什么它之前失败了。

© www.soinside.com 2019 - 2024. All rights reserved.