【问题标题】:Post Build PowerShell Script does not include installed modulesPost Build PowerShell 脚本不包括已安装的模块
【发布时间】:2018-04-05 17:16:50
【问题描述】:

我在我的后期构建配置中调用以下脚本:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -file "\Sclddev8\tfs\Scripts\slack-notice.ps1" -Verb RunAs;

但是,我不断收到此错误:

Send-SlackMessage : 术语“Send-SlackMessage”未被识别为名称

但是我已经在我的环境中安装了这个模块,如果我打开一个 PowerShell 控制台或在这个构建过程之外运行文件,则可以正常工作。

【问题讨论】:

  • 我有同样的问题:我从 MSBuild 运行 Powershell 脚本作为 Exec 任务。我采用了相同的命令,然后在 CMD 会话中运行它,它可以工作。除了从 MSBuild 运行之外,它适用于所有场景。我在这里迷路了。

标签: powershell cmd msbuild


【解决方案1】:

当您安装 Powershell 模块时,从技术上讲,您每次打开新的 Powershell 窗口时都会从您的配置文件中导入该模块。通过使用“-NoProfile”开关运行 Powershell,您可以阻止导入模块(即使它已“安装”并且文件存在)。

如果您想保持“-NoProfile”开关处于活动状态,最好的选择是在脚本顶部有一行来导入模块,然后再继续。如果您使用 Warren Frame 的“PSSlack”模块,您需要的命令是:

> Import-Module PSSlack

【讨论】:

  • 试过并得到这个:“Import-Module:指定的模块'PSSlack'未加载,因为在任何模块目录中都找不到有效的模块文件。”
  • 您可能需要参考实际的 .psm1。 Import-Module C:\Users\UserName\Documents\WindowsPowerShell\Modules\PSSlack\PSSlack.psm1
  • 谢谢你的工作。我不确定为什么不提供完整路径就找不到这些东西,这很奇怪。
  • 老实说,我不确定“-NoProfile”对事物的影响。我敢打赌它甚至可以作为虚拟用户的进程运行,因此它没有可遵循的环境配置文件路径。尽管 NoProfile 是一种最佳实践,但我遇到的麻烦比任何事情都多。当您使用它时,最好明确说明您正在调用的所有其他内容。
  • 关于如何向%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Unrestricted -file "\\Sclddev8\tfs\Scripts\slack-notice.ps1 -myParam $(TargetDatabase)" -Verb RunAs;"提供参数的任何想法
【解决方案2】:

我遇到了同样的问题。

有帮助的是...将文件夹复制到C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules

是的,这很重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多