【问题标题】:Hudson won't run any Powershell scripts using Powershell pluginHudson 不会使用 Powershell 插件运行任何 Powershell 脚本
【发布时间】:2011-03-26 08:27:17
【问题描述】:

使用 Powershell 插件从 Hudson CI 服务器执行 Powershell 脚本时遇到问题。我在跑步:

  • 哈德森 v1.362
  • Windows 2003
  • Powershell 1.0

我正在尝试为 Hudson 使用 Powershell 插件。我尝试的任何东西都会给我:


File C:\DOCUME~1\SVC_PR~1\LOCALS~1\Temp\hudson2144883754471568213.ps1  
  cannot be loaded because the execution of scripts is disabled on this system.

我已将ExecutionPolicy 设置为“Unrestricted”,但我仍然在 Hudson 收到相同的消息。

  1. 尝试重新启动 Hudson - 没有解决问题。
  2. 尝试将“Set-ExecutionPolicy Unrestricted”放入运行 Hudson 的帐户的 Powershell 配置文件中,但只成功地两次而不是一次向我提供了上述消息(哦,具有讽刺意味)
  3. 尝试从命令行“Powershell -ExecutionPolicy Unrestricted”发出。
    返回的错误:“Missing expression after unary operator '-'. At line:1 char:2 + -ExecutionPolicy Unrestricted” - 我假设是因为我使用的是 Powershell 1 而-ExecutionPolicy 不是 v1 选项。

所以我被困住了。任何关于如何让 Hudson 使用这个 Poweshell 插件运行 Powershell 脚本的建议都将受到欢迎。

谢谢

杰米

【问题讨论】:

    标签: powershell hudson


    【解决方案1】:

    好消息。安装 Powershell v2 似乎 已经解决了这个问题。我不能 100% 确定所有问题都已解决,但我可以使用适用于 Hudson 的 Powershell 插件成功执行 Powershell 命令,这是个好消息。

    感谢大家的帮助,我希望这个帖子将来对人们有用。

    问候 杰米

    【讨论】:

      【解决方案2】:

      由于Hudson PowerShell Plugin 中的 cmets 也提到了这个问题,您可以恢复为以下脚本:

      " powershell.exe "& 'script.ps1'" "
      

      同样的脚本可以确保相应地设置策略(RemoteSignedUnrestricted

      【讨论】:

      • 是的,也试过了。它似乎“挂起”了这项工作(即在控制台输出中没有得到任何东西),我可以在系统的其他地方查看它实际上没有做任何事情。大约 6 分钟前开始它,但仍然没有得到任何输出 :( 基本上看起来不太好!!!
      • @jamiet:确实不好。 Hudson 使用的帐户是否具有管理员权限?
      • 是的!无论如何,草皮它,我已经说服服务器管理员让我安装 Powershell v2.0,所以我正在祈祷使用 -ExecutionPolicy 将解决它。观看这个空间(我会报告)
      • 不,您不能在脚本内部设置执行策略,因为只是尝试运行脚本需要正确更改执行策略。
      【解决方案3】:

      听起来 Hudson CI 服务器可能在与您设置执行策略的用户帐户不同的用户帐户下运行。如果是这种情况,则以该用户身份登录并设置执行策略。如果这是在内置帐户下运行的服务,您可以尝试创建特殊帐户,将服务配置为使用该帐户并设置执行策略。除此之外,升级到 PowerShell 2.0 并按照您的尝试在命令行中传递策略(1.0 不支持)。

      另一种方法是通过 GPO 或 reg 键在机器范围内设置执行策略:

      HKLM\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell 
      

      并将 ExecutionPolicy 值设置为“RemoteSigned”或“Unrestricted”

      【讨论】:

      • 嗨 Keith,是的,已经尝试过了(即以运行 Hudson 的用户身份登录)。它不起作用。我会去和服务器团队谈谈把 2.0 放在那里的事。经验告诉我他们不会很有帮助:(-Jamie
      • 另一种方法是通过 GPO 或 reg 键在机器范围内设置执行策略 - HKLM\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell 并将 ExecutionPolicy 值设置为“RemoteSigned”或“不受限制”。
      • 嗨,基思。啊,不知道我能做到这一点。不幸的是,我看了看,它已经设置为 RemoteSigned 另一扇门砰地一声关在我的脸上,这真是令人困惑。无论如何,感谢基思的建议。
      【解决方案4】:

      对于其他研究此问题的人,我得出的一种解决方法是从设置执行策略的 Jenkins 作业中运行标准 Windows 批处理命令:

      powershell.exe -command set-executionpolicy unrestricted
      

      出于某种原因,Jenkins 使用的策略覆盖了机器范围的策略。在 Jenkins 中运行 set-executionpolicy 是确保设置特定于 Jenkins 环境的策略的快速方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-01
        • 2013-05-19
        • 1970-01-01
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多