Неявная загрузка модуля Powershell в новом сеансе завершается неудачно с параметром автозаполнения, но работает иначе - PullRequest
0 голосов
/ 11 октября 2018

Справочная информация. У нас есть около 13 модулей, внутренне разделенных на бизнес-функции, такие как ActiveDirectory, WindowsServices, IIS, Configuration, Common и т. Д. Например, CompanyName.PowerShell.IIS.

Файлы структурированы следующим образомдля легкой разработки и тестирования:

\
 CompanyName.PowerShell.IIS.psd1
 CompanyName.PowerShell.IIS.psm1
 Public\
        Open-CompanySites.ps1
        ... other files
 Private\
         VariableDeclarations.ps1
         ... other files
 tools\
       chocolateyInstall.ps1
       chocolateyUninstall.ps1

Шоколадный кусочек просто чтобы продемонстрировать, как они распределяются.Это поместит те же файлы в C:\Program Files\WindowsPowerShell\Modules\CompanyName.PowerShell.IIS\3.0.1\ в ту же структуру подпапок.

Файл CompanyName.PowerShell.IIS.psd1 выглядит следующим образом (дать или взять)

@{
    RootModule = 'CompanyName.PowerShell.IIS.psm1'
    ModuleVersion = '3.0.1'
    GUID = '130bc983-b4bd-464a-bfa0-23dbe3facfac'
    Author = 'jcolebrand'
    CompanyName = 'Company Name, Inc.'
    Copyright = '(c) 2018 Company Name, Inc. All rights reserved.'
    PowerShellVersion = '5.0'
    RequiredModules = 'CompanyName.PowerShell.Common','CompanyName.PowerShell.Services','CompanyName.PowerShell.Configuration'
    FunctionsToExport = 'Open-CompanySites', ... other files
    ScriptsToProcess = 'Public\Open-CompanySites','Private\VariableDeclarations', ... other files
}

И это примерно открытие Open-CompanySites

<#
.SYNOPSIS
    Opens up non-STS websites in the users default browser
#>
function Open-CompanySites {

    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$false)]
        [Alias("AdminOnly")]
        [switch]$adminSitesOnly,

        [Parameter(Mandatory=$false)]
        [Alias("Random")]
        [switch]$randomSite,

        [Parameter(Mandatory=$false)]
        [string] $filter = ""
    )

Когда у меня естьмодуль установлен в соответствующую папку, я открываю новое приглашение powershell и набираю Open-Comp<tab-autocomplete>, модуль загружается (неявная загрузка, ожидаются небольшие задержки), функция автоматически завершается, и все работает точно так, как ожидалось.

Когда модуль установлен в соответствующую папку, я открываю новое приглашение powershell и набираю Open-Comp<tab-autocomplete> -adm<tab-autocomplete>, модуль загружается (неявная загрузка, небольшие задержки, ожидается), функция автозаполнения, параметрзатем автозаполнение, как и ожидалось, и PowerShell выдает ошибку о том, что функция не определена или не определены некоторые необходимые зависимости.Зависит от того, с какой ошибкой я сталкиваюсь, основываясь на последовательности событий.

Суть ошибки - автозаполнение параметра , вызывающего горе.Все работает нормально, если у меня уже загружен модуль (Import-Module CompanyName.PowerShell.IIS или Open-CompanySites - без параметров).Проблема возникает в том случае, когда модуль не был загружен, и я автоматически заполняю параметр.

На данный момент я не представляю, как отыскать эту ошибку в Google ИЛИ как еще больше упростить ее.


Вот моя версия PowerShell.

 $psversiontable

Name                           Value
----                           -----
PSVersion                      5.1.17134.228
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17134.228
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
...