【问题标题】:Can't get basic Powershell script running inside Team City无法在 Team City 中运行基本的 Powershell 脚本
【发布时间】:2012-02-28 06:07:44
【问题描述】:

这是我的配置:

在构建日志中,我只看到前两行的输出,然后“进程退出,代码 0”作为此构建步骤的最后一个输出。

我尝试使用 SYSTEM 帐户(使用PsTools)在构建服务器中打开一个终端,因为 Team City 配置为在该帐户下运行。然后,我创建了一个具有相同内容的 Test.ps1 文件并运行了一个类似于 Team City 的命令:

[Step 1/4] Starting: C:\Windows\system32\cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -Command - <C:\TeamCity\buildAgent\temp\buildTmp\powershell5129275380148486045.ps1 && exit /b %ERRORLEVEL%

(当然,.ps1 文件的路径和 cmd.exe 初始部分除外)。看到前两行的输出,然后终端一下子消失了!

我在哪里搞砸了?顺便说一下,我是 Powershell 新手。

【问题讨论】:

  • 您是否设置了执行策略以允许您的脚本?
  • 我选择“使用 -Command 参数将脚本放入 Powershell 标准输入”来避免这种情况。此外,如果它可以运行前两行,我认为权限是可以的,还是我需要额外的权限来运行条件逻辑?那太疯狂了:P
  • 我没有这个工具的上下文,但我想知道它是否有与多行标准输入有关的问题?尝试用以下(单行)替换条件以查看是否得到不同的结果: if ("1" -eq "1") { write-host "test" } else { write-host "else test" }跨度>
  • 当我尝试使用类似命令行的脚本时,一切正常。尝试将&amp;&amp; exit ... 替换为&amp;&amp; pause,以查看在窗口关闭之前是否可以看到最后一行“Ok, nothing to see...”。或者您可以将 /c 更改为 /k,这样窗口就会保留 - 只是为了帮助调试。
  • 我觉得你的剧本太搞笑了,试试不那么搞笑的剧本 :-)

标签: powershell teamcity powershell-1.0


【解决方案1】:

Powershell 的 stdin 命令选项在这样的多行命令周围有些奇怪。

您可以使用以下形式的脚本:

write-host "test"
write-host "test2"
if("1" -eq "1"){write-host "test3 in if"} else {write-host "test4 in else"}

理想的方法是在 TeamCity 中使用 Script : File 选项,它将运行您使用 Powershell 的 -File 参数指定的脚本。

如果您不想拥有文件和 VCS,请在当前设置中将 Script Execution Mode 更改为 Execute .ps1 file with -File argument。

【讨论】:

  • 你是对的,如果 if-else 子句是单行的,它就可以工作。想知道 Powershell 2.0 是否也会发生这种情况?无论如何,由于代码可读性是优先考虑的,我决定遵循你的第二个建议(这意味着在 SYSTEM 帐户下打开一个终端,并运行以下命令:1)powershell 2)Set-ExecutionPolicy RemoteSigned 3)exit)跨度>
  • @dario_ramos - 发生在 powershell 3.0 CTP :)
  • 注意可以使用“;”在一行中分隔多个语句。
  • 而且答案仍然有效......不幸的是
【解决方案2】:

我在使用 TeamCity 的内联 powershell 脚本时遇到了这个问题(直到当前版本的 7.1.3)。我发现问题出在制表符而不是多行语句上。尝试用空格替换制表符(同时仍然保持多行),脚本应该可以正常运行。

【讨论】:

  • Perfect 也有同样的问题。讨厌标签:)
  • 标签问题同上。它会导致步骤挂起
【解决方案3】:

您可以尝试将打开块的大括号与 If 放在同一行。

即,

If ('1' -eq '1') {
    ...
}
Else {
    ...
}

这是您在 Powershell 中看到的常用样式,显然,将大括号放在下一行可能会导致问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2013-01-02
    • 2018-03-21
    相关资源
    最近更新 更多