Powershell隐式模块在新会话中的加载失败,并带有自动完成参数,但可以正常运行

时间:2018-10-11 03:19:24

标签: powershell autocomplete powershell-module

背景:我们在内部将大约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

0 个答案:

没有答案