【问题标题】:TFS post build powershell script not seeing commands from imported moduleTFS post build powershell脚本看不到来自导入模块的命令
【发布时间】:2019-10-19 01:55:18
【问题描述】:

我们有一个使用自定义模板的 TFS 构建过程。在成功创建 crm 解决方案文件的情况下,构建工作正常。然后,我们尝试在构建后运行 powershell 脚本。此脚本导入一个模块。但是模块中的命令没有被公开。每当我们尝试调用命令时,都会出现错误。沿着

“Get-XrmSolution”一词未被识别为 cmdlet 的名称, 函数、脚本文件或可运行的程序。

无论我们在那个模块中使用哪个命令,我们都会得到相同类型的错误。

为了解决问题,我们已经以构建帐户的身份登录到构建服务器,并且可以成功运行我们正在尝试运行的脚本。

将更多输出添加到脚本中以进行故障排除...

Get-Module 列出 Xrm.Framework.CI.PowerShell。 - 好。

Get-Command -Module "Xrm.Framework.CI.PowerShell" 不返回任何内容。在控制台中,列出了许多命令。

在运行 powershell 后构建脚本时我们需要做些什么来使导入的模块的内容能够被看到?

【问题讨论】:

  • 模块是从 32 位 PowerShell 进程加载还是特定于 64 位?请记住,VS 是 32 位的,并且可能会启动 32 位版本的 PowerShell。
  • 这是否意味着 TFS 构建将运行 32 位 PowerShell 进程?这可能是相关的。我们正在加载的模块将是 64 位的。
  • 谢谢基思。这使我们陷入了一定的故障排除轨道。在 Build 过程参数中将 MSBuildPlatform 从 Auto 更改为 X86,一切都很好。

标签: powershell tfs dynamics-crm-2011


【解决方案1】:

注意 MSBuild 调用的 PowerShell 的位数以及 Visual Studio 启动的 MSBuild 的位数。某些模块只能在 32 位或 64 位 PowerShell 中运行,不能同时在两者中运行。您要确保正在启动正确版本的 PowerShell。

【讨论】:

  • 你是怎么做到的?我遇到了同样的问题,我想在 32 位 PowerShell 中运行我的脚本
  • 如果您需要从 64 位 msbuild 启动 32 位 PowerShell,请使用路径 $(WinDir)\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • 我明白了,这很棒。我只是不确定在哪里打这个电话。我是否直接将其放在脚本的开头?
  • 如果这是来自 MSBuild 文件,那么它将位于 <Exec Command="$(WinDir) \SysWOW64\WindowsPowerShell\v1.0\powershell.exe myscript.ps1"/>
【解决方案2】:

IIRC 您必须显式导入模块,而不假设加载到用户配置文件或脚本路径上。 假设 Module1.psm1 与您的脚本位于同一文件夹中,请使用类似

Import-Module (Join-Path (Split-Path -Parent $MyInvocation.MyCommand.Definition) 'Module1.psm1')

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。

    模块已加载到“C:\Program Files\WindowsPowerShell\Modules”文件夹(64 位)中。

    当我以用户身份登录时一切似乎都很好,但在 TFS 构建期间它失败了。

    解决方案:我必须在 PowerShell 64 位中卸载模块并在 PowerShell 32 位中重新安装。

    该模块随后安装在“C:\Program Files (x86)\WindowsPowerShell\Modules”文件夹中。

    【讨论】:

      猜你喜欢
      • 2018-04-05
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2018-09-06
      相关资源
      最近更新 更多