我正在尝试使用 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 进程启动了一秒钟的片段,在记录它之后,我可以看到它似乎在秘密密钥中间剪切了参数列表。我在这里做错了什么?
感谢@Santiago Squarzon 解决了。
根据评论,问题现在通过拆分参数和参数而不是将它们放在一起来解决,但对于将来,真正容易排除故障的方法是编译
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 个参数,这解释了为什么它之前失败了。