Специальный модуль PowerShell не загружается автоматически
Я использую PowerShell 4 на Windows Server 2012 R2.
Определенный модуль, WebAdministration, не загружается автоматически при вызове командлета из этого модуля. Все другие модули, которые я пробовал автоматически загрузить успешно. Я могу загрузить этот модуль вручную, используя Import-Module, и он ведет себя как положено.
- Переменная среды PSModulePath содержит путь к модулю. Другие модули из этого пути автоматически загружаются.
- Модуль не кастомный. Это встроенная функция IIS. Функция включена.
- Автозагрузка включена. $PSModuleAutoLoadingPreference имеет значение "Все"
- Get-Command "Get-WebBinding" не работает, но Get-Command | где {$_.Name -eq "Get-WebBinding"} делает.
- Get-Module -ListAvailable | где { $_.Name -eq "WebAdministration"} возвращает модуль с правильным путем.
PSModulePath =% SystemRoot% \ system32 \ WindowsPowerShell \ v1.0 \ Modules \Путь к модулю WebAdministration = C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration
Выход из простого теста
PS C:\Users\ Администратор> $PSModuleAutoLoadingPreference = "Все"
PS C:\Users\ Administrator> Get-WebBinding Get-WebBinding: термин "Get-WebBinding" не распознается как имя командлета, функции, файла сценария или работоспособной программы. Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку. В строке:1 символ:1 + Get-WebBinding + ~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (Get-WebBinding: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException
PS C:\Users\ Администратор> Import-Module WebAdministration
PS C:\Users\ Администратор> Get-WebBinding
привязка протоколаинформация sslFlags -------- ------------------ -------- http *:8082: 0 http *:8081: 0
Любые предложения о том, почему не работает автоматическая загрузка, будет принята с благодарностью. Спасибо!
3 ответа
Я бы рассмотрел возможность использования#Requires
в верхней части файла сценария после того, как вы импортировали его для профиля, под которым будет выполняться сценарий. Сценарий, скорее всего, не запустится, пока не найдет необходимый ему модуль. Тогда вам не нужно использовать командлет import-module, так как он уже обработан за вас. Подробнее об операторах require можно прочитать здесь . например:
#Requires -Modules WebAdministration
Попробуйте переустановить модуль, чтобы увидеть, имеет ли это значение.
Если это не сработает, хотя то, что автозагрузка не работает, раздражает, вы можете импортировать модуль перед использованием и ожидать, что он заработает.
Import-Module WebAdministration
Get-WebBinding
Или, если вам нужен однострочный:
Import-Module WebAdministration; Get-WebBinding
Вот как я выбрал загрузку модулей при каждом запуске ISE. Это дает мне возможность загружать определенные модули. Я знаю, что это не то, о чем вы просили, но это автоматически загружает модули, и обязательно обратите внимание на то, как эти модули вызываются.
Создайте следующий файл:
Path: C:\Users\<username>\Documents\WindowsPowershell
File: Microsoft.PowerShellISE_profileX.PS1
В файле я использую этот код, но при необходимости изменяю:
$a = new-object -comobject wscript.shell
$intAnswer = $a.popup("Connect to Office 365?",0,"Office 365",4)
if ($intAnswer -eq 6){
#YES - Go to Cloud
#$a.popup("You answered yes.")
Set-Location H:\sandbox
#. .\Start3.ps1
. .\Auto-Connector.ps1
. .\Refresh-PSSession.ps1
. .\ScriptLoaders.ps1
. .\ESDSCRIPTS3.ps1
}else{
Set-Location H:\sandbox
Import-Module ActiveDirectory
}