PowerShell - 服务器 2012 - 自定义模块加载问题

PowerShell - 服务器 2012 - 自定义模块加载问题

我在使用当前在 Server 2008 R2 上运行的部署脚本时遇到了一个令人沮丧的问题,而由于 PS 无法识别我们复制和导入的自定义模块,我无法在 Server 2012 上启动。

错误:

导入模块:未加载指定的模块“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
}

复制模块.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 中运行部署,因为在版本 2 模式下,ActiveDirectory 模块无法加载到 Server 2012 上(需要版本 3 或更高版本)。

在运行上述命令并添加 -Version 3 时也会发生这种情况。

答案1

嗯,问题出在 LoggingModule.psm1 文件本身。有一段代码产生了错误,由于 PowerShell 窗口及其缓冲区大小(在顶部截断),我错过了这个错误。模块文件已更正,其余模块已加载。

相关内容