У меня неприятная проблема с нашим сценарием развертывания, который в настоящее время работает на Server 2008 R2, и я не могу начать работу на Server 2012 из-за проблем с PS, не распознающих наши настраиваемые модули, которые мы копируем и импортируем.
Ошибка:
Import-Module: указанный модуль «LoggingModule» не был загружен, поскольку ни в одном каталоге модулей не найден допустимый файл модуля.
Я проверил переменную среды PSModulePath и вручную изменил ее, чтобы включить наш заданный путь, и я даже настроил наш скрипт для прямого вызова файлов модуля. Вот раздел соответствующего кода:
try {
. ".\CopyModules.ps1" -debug:$debug
$moduledir = ($env:USERPROFILE + "\Documents\WindowsPowerShell\Modules")
Import-Module $moduledir\LoggingModule\LoggingModule.psm1 -DisableNameChecking -Args $debug
InitializeLogging -LogPathArg "$LocalBuildDirectory\build-log-$(get-date -f yyyy-MM-dd).txt"
if (-not (Get-Module WindowsModule)) {
Import-Module $moduledir\WindowsModule\WindowsModule.psm1 -DisableNameChecking
}
if (-not (Get-Module WebRequestModule)) {
Import-Module $moduledir\WebRequestModule\WebRequestModule.psm1 -DisableNameChecking
}
}
catch {
Write-Error "Error importing modules to local system. Application cannot continue without modules being installed correctly"
Write-Error $_
exit
}
CopyModules.ps1:
Param([switch]$debug)
function Get-WorkingDirectory
{
$dir = [System.String]::Empty;
if($hostinvocation -ne $null)
{
$dir = Split-Path $hostinvocation.MyCommand.path
}
else
{
$dir = Split-Path $script:MyInvocation.MyCommand.Path
}
return $dir
}
# "Include" these, with ClientSetup.ps1 first - it defines the globals
# and functions needed by the other files.
$BuildModulesPath = "$(Get-WorkingDirectory)\Modules\*"
$PSModulePath = (New-Item -ItemType Directory -Path ($env:USERPROFILE + "\Documents\WindowsPowerShell\Modules") -Force -ErrorAction Stop)# | Out-Null
try {
Copy-Item $BuildModulesPath -Destination $PSModulePath -Recurse -Force
if ($debug)
{
Write-Host "DEBUG: Modules copied from: $BuildModulesPath"
Write-Host "DEBUG: Modules copied to: $PSModulePath"
}
}
catch {
Write-Error "Could not copy modules to module directory"
throw
}
CopyModules работает нормально, и я вижу файлы в их каталоге.
Сценарий вызывается с помощью этой команды:
powershell.exe -ExecutionPolicy Bypass \\deployserver.com\Staging\Builds\Scripts\StartBuild.ps1 -build Server2012 -debug
Кстати, этого не происходит, когда я добавляю -Version 2 к команде скрипта. Однако я не могу запустить развертывание в версии 2 из-за проблем с тем, что модуль ActiveDirectory не загружается на Server 2012 в режиме версии 2 (требуется версия 3 или выше).
Эта ситуация также возникает при выполнении указанной выше команды с добавленной -Version 3.
Что ж, проблема была в самом файле LoggingModule.psm1. Был сегмент кода, который создал ошибку, которую мне не хватало из-за окна PowerShell и его размера буфера (обрезано вверху). Файл модуля был исправлен, а остальные модули были загружены.