Почему мой сценарий задачи Azure PowerShell может найти модуль, используя find-module, но не с import-module? - PullRequest
1 голос
/ 05 июня 2019

Мне трудно импортировать модуль сообщества PoshRSJob в сценарии PowerShell через задачу Azure PowerShell. Это продолжает давать мне эту ошибку:

Указанный модуль 'PoshRSJob' не был загружен, поскольку ни в одном каталоге модулей не было найдено допустимого файла модуля.

Я попытался это исправить, установив еще один модуль с именем InstallModuleFromGitHub, который я использовал для непосредственной установки PoshRSJob с помощью команды Find-Module PoshRSJob | Install-ModuleFromGitHub. Я собрал скрипт, установив только модули InstallModuleFromGitHub и PoshRSJob (и все остальное закомментировано), и это удалось. Остальная часть скрипта вызывает функции, которые вызывают 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

Функция из \JJK.TS.Azure.psm1\, которая вызывается в StartVM, которая имеет команду 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 во-первых?

[EDIT] Я пытался использовать Get-Module -ListAvailable -Name PoshRSJob | Import-Module для передачи его на Import-Module, и я не знаю, как интерпретировать результаты. Похоже, что задача успешно импортирует PoshRSJob, а затем полностью игнорирует ее, говорит, что не может найти модуль, и завершается ошибкой. Я думаю, что должно быть разъединение между хранилищем, в котором хранится PoshRSJob, и хранилищем, которое просматривает агент. Как бы я мог это исправить, если бы это было так? (для краткости я включил только журналы, созданные этими двумя командами: Get-Module -ListAvailable -Name PoshRSJob | Import-Module -Force -Verbose и Get-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)

1 Ответ

0 голосов
/ 06 июня 2019

Я решил это!Install-ModuleFromGitHub в итоге установил PoshRSJob в репозиторий, к которому агент не смог добраться.Я удалил модуль с помощью Uninstall-Module -Name PoshRSJob -AllVersions -Force.Затем я попытался использовать обычную команду Install-Module.Раньше это не работало, и это одна из причин, по которой я пытался использовать Install-ModuleFromGitHub, но теперь по какой-то причине это работает.Так или иначе, после вызова Install-Module -Name PoshRSJob -Force я импортировал его, используя Import-Module -Name PoshRSJob.Я протестировал сборку через tfs, и он не только смог найти PoshRSJob, но и сумел выполнить много кода, прежде чем что-то еще сломалось!Но это не относится к этому конкретному вопросу, поэтому я оставлю это на этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...