Справочная информация. У нас есть около 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