azure - 为什么我的 Azure PowerShell 任务脚本可以使用 find-module 找到模块,但不能使用 import-module?

标签 azure powershell tfs

我在通过 Azure PowerShell 任务导入 PowerShell 脚本中的社区模块 PoshRSJob 时遇到困难。它一直给我这个错误:

The specified module 'PoshRSJob' was not loaded because no valid module file was found in any module directory.

我尝试解决此问题的方法是安装另一个名为 InstallModuleFromGitHub 的模块,我使用该模块使用命令 Find-Module PoshRSJob | 直接安装 PoshRSJob安装ModuleFromGitHub。我使用仅安装 InstallModuleFromGitHubPoshRSJob 模块(以及其他所有内容都已注释掉)的脚本进行构建,并且成功了。脚本的其余部分调用调用 Import-Module PoshRSJob 的函数,因此,如果模块安装正确,其他一切都应该正常工作。好吧,尽管模块据称安装成功,但构建失败并出现与之前相同的错误。当我调用 Find-Module -Name PoshRSJob 时,构建成功找到它。但是当我调用 Import-Module -Name PoshRSJob 时,构建失败并再次给出错误。

这些是失败构建的控制台日志:

******************************************************************************
Import-Module -Name C:\Program Files (x86)\Microsoft SDKs\Azure\PowerShell\ResourceManager\AzureResourceManager\AzureRM.Profile\AzureRM.Profile.psd1 -Global
Add-AzureRMAccount -ServicePrincipal -Tenant a9691d3f-49e3-46a8-8b23-ddad274d0523 -Credential System.Management.Automation.PSCredential
Select-AzureRMSubscription -SubscriptionId 4242fd68-ea68-4c3c-869a-43269a2b8271 -TenantId a9691d3f-49e3-46a8-8b23-ddad274d0523
& '\\neenah-san1\KTS-Dev\temp\Noah\LoadTestingTests\StartVM.ps1'
Version    Name                                Repository           Description
-------    ----                                ----------           -----------
1.7.4.4    PoshRSJob                           PSGallery            Module d...
The specified module 'PoshRSJob' was not loaded because no valid module file was found in any module directory.
******************************************************************************
Finishing task: AzurePowerShell
******************************************************************************
System.Exception: Task AzurePowerShell failed. This caused the job to fail. Look at the logs for the task for more details.
at Microsoft.TeamFoundation.DistributedTask.Worker.JobRunner.Run(IJobContext jobContext, IJobRequest job, IJobExtension jobExtension, CancellationTokenSource tokenSource)
Worker Worker-9aa3b65a-1416-4840-a9fa-44dce695db94 finished running job 9aa3b65a-1416-4840-a9fa-44dce695db94
******************************************************************************
Finishing Build

这是 StartVM.ps1 中导致这些日志的相关代码:

# import modules
Install-Module -Name InstallModuleFromGitHub -RequiredVersion 0.3 -Force -Scope CurrentUser
Find-Module PoshRSJob | Install-ModuleFromGitHub -Verbose
Import-Module '\\neenah-san1\TSbuild\Deployment\Tools\PowerShell\Azure\JJK.TS.Azure.psm1' -Force -Prefix 'TS' -Verbose 

Find-Module -Name PoshRSJob
Import-Module -Name PoshRSJob

StartVM 中调用的 \JJK.TS.Azure.psm1\ 函数,其中包含命令 Import-Module PoshRSJob:

function Start-AzureVM {
    <#
    .synopsis
    Starts one or more VMs using background threads
    .example
    Get-AzureRmVM -ResourceGroupName 'TS-LoadTest-TST' | Start-AzureVM
    #>
    [CmdletBinding(SupportsShouldProcess = $true)]

    param (
      [Alias("Name")]
      [Parameter( Mandatory=$true,
                  ValueFromPipeline=$false,
                  ValueFromPipelineByPropertyName=$true)]
                    [string]$VMName,
      [Parameter( Mandatory=$true,
                  ValueFromPipeline=$false,
                  ValueFromPipelineByPropertyName=$true)]
                    [string]$ResourceGroupName,
      [Parameter( Mandatory=$false,
                  ValueFromPipeline=$false,
                  ValueFromPipelineByPropertyName=$false)]
                    [string]$SubscriptionName,
      [Parameter( Mandatory=$false,
                  ValueFromPipeline=$false,
                  ValueFromPipelineByPropertyName=$false)]
                    [PSCredential]$Credential
    )

    begin {

      $ErrorActionPreference = "Stop"

      # import community module to handle powershell runspaces
      Import-Module 'PoshRSJob'

代理如何同时找到和找不到模块?
为什么它一开始就找不到 PoshRSJob

[编辑]我尝试使用Get-Module -ListAvailable -Name PoshRSJob | Import-Module 将其通过管道传输到 Import-Module,我真的不知道如何解释结果。看起来任务导入 PoshRSJob 成功,然后完全忽略它,说它找不到模块,然后失败。我认为存储 PoshRSJob 的存储库和代理正在查找的存储库之间必须存在脱节。如果是这种情况,我该如何补救? (为简洁起见,我仅包含这两个命令创建的日志:Get-Module -ListAvailable -Name PoshRSJob | Import-Module -Force -VerboseGet-AzureRmVM -ResourceGroupName 'TS- LoadTest-TST' | Where-Object {$_.Name -match 'vstc'} | Start-TSAzureVM )

2019-06-05T20:26:23.7173881Z ##[debug]Loading module from path 'C:\Program Files\WindowsPowerShell\Modules\PoshRSJob\PoshRSJob\Scripts\TabExpansion.ps1'.
2019-06-05T20:26:23.7223881Z ##[debug]Dot-sourcing the script file 'C:\Program Files\WindowsPowerShell\Modules\PoshRSJob\PoshRSJob\Scripts\TabExpansion.ps1'.
2019-06-05T20:26:23.7463881Z ##[debug]Loading module from path 'C:\Program Files\WindowsPowerShell\Modules\PoshRSJob\PoshRSJob\PoshRSJob.psm1'.
2019-06-05T20:26:24.1043881Z ##[debug]Importing function 'Get-RSJob'.
2019-06-05T20:26:24.1063881Z ##[debug]Importing function 'Receive-RSJob'.
2019-06-05T20:26:24.1083881Z ##[debug]Importing function 'Remove-RSJob'.
2019-06-05T20:26:24.1093881Z ##[debug]Importing function 'Start-RSJob'.
2019-06-05T20:26:24.1113881Z ##[debug]Importing function 'Stop-RSJob'.
2019-06-05T20:26:24.1133881Z ##[debug]Importing function 'Wait-RSJob'.
2019-06-05T20:26:24.1153881Z ##[debug]Importing alias 'gsj'.
2019-06-05T20:26:24.1173881Z ##[debug]Importing alias 'rmsj'.
2019-06-05T20:26:24.1193881Z ##[debug]Importing alias 'rsj'.
2019-06-05T20:26:24.1213881Z ##[debug]Importing alias 'spsj'.
2019-06-05T20:26:24.1233881Z ##[debug]Importing alias 'ssj'.
2019-06-05T20:26:24.1243881Z ##[debug]Importing alias 'wsj'.
2019-06-05T20:26:24.2903881Z ##[error]The specified module 'PoshRSJob' was not loaded because no valid module file was found in any module directory.
2019-06-05T20:26:28.9823881Z Finishing task: AzurePowerShell
2019-06-05T20:26:28.9873881Z ##[error]System.Exception: Task AzurePowerShell failed. This caused the job to fail. Look at the logs for the task for more details.
2019-06-05T20:26:28.9873881Z ##[error]   at Microsoft.TeamFoundation.DistributedTask.Worker.JobRunner.Run(IJobContext jobContext, IJobRequest job, IJobExtension jobExtension, CancellationTokenSource tokenSource)

最佳答案

我解决了! Install-ModuleFromGitHub 最终将 PoshRSJob 安装在代理无法访问的存储库中。我通过 Uninstall-Module -Name PoshRSJob -AllVersions -Force 卸载了该模块。然后,我尝试使用普通的 Install-Module 命令。这之前不起作用,这是我尝试使用 Install-ModuleFromGitHub 的部分原因,但由于某种原因它现在可以工作。所以无论如何,在调用 Install-Module -Name PoshRSJob -Force 后,我使用 Import-Module -Name PoshRSJob 导入它。 我通过 tfs 构建进行了测试,它不仅能够找到 PoshRSJob,而且它还能够在其他问题发生之前执行大量代码!但这与这个具体问题无关,所以我就到此为止。

关于azure - 为什么我的 Azure PowerShell 任务脚本可以使用 find-module 找到模块,但不能使用 import-module?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56465276/

相关文章:

powershell - 如何用上一行的单词填充文本文件中的空白?

powershell - 在Windows中批量处理Pandoc转换

visual-studio-2012 - 通过Visual Studio取消待处理的更改会挂起大量更改

logging - TFS 自定义构建代理范围日志被覆盖。

TFS:这可能吗?

azure - 如何通过 ssh 连接到 ACS Kubernetes 集群中的节点?

部署到 Azure 的 node.js 网站 - 404 无法加载 .json 资源

asp.net-mvc - AADSTS750054 : SAMLRequest or SAMLResponse must be present as query string parameters in HTTP request for SAML Redirect binding

linux - 如何查找 Azure VM 的 FQDN

powershell - 如何将 msi 从 Visual Studio Online 部署到 azure vm?