【发布时间】:2021-10-18 18:45:06
【问题描述】:
我正在创建一个本地 PowerShell 模块下载器脚本。模块和脚本保存在网络共享上。使用以下方式调用脚本:
& '\\net\DSFShare\Shared Data\Powershell Modules\Install-MyModuleManager.ps1'
它将脚本复制到标准配置文件模块文件夹,然后从模块文件夹运行 Install.ps1。如果需要,Install.ps1 会提升自己。就在提升的窗口关闭之前,会弹出一个红色错误,但窗口关闭得太快,我看不到错误。我怎样才能找出错误是什么?
下载器脚本使用以下方法调用安装程序:
$installerPath = [IO.Path]::Combine($LocalModulePath, 'Install.ps1')
Write-Host "Installer path: $installerPath"
if (Test-Path $installerPath) {
Write-Host 'Install.ps1 exists. Running Install.ps1'
& $installerPath
}
注意,如果从 PowerShell 填充 $installerPath 并使用 & $installerPath 调用它,我看不到错误。
我检查了应用程序、系统、Windows PowerShell 和安全事件日志。没有任何与此相关的错误。
脚本所做的只是创建一个事件源。如果你想运行它,你可以使用:
Remove-EventLog -Source 'My.Module.Manager'
之后,将其删除。这是脚本:
Write-Host "Installing module..."
$eventSource = 'My.Module.Manager'
try {
$sourceExists = [System.Diagnostics.EventLog]::SourceExists($eventSource)
} catch [Security.SecurityException] {
Write-Verbose "Caught 'SecurityException': $_.Exception.Message"
}
if ($sourceExists) {
Write-Host "...installation complete..."
} else {
#region ----- Ensure-ProcessIsElevated -----
if ($Verbose) {
$VerbosePreference = "Continue"
}
if ($Debug) {
$DebugPreference = "Continue"
}
Write-Debug "Command line is ___$($MyInvocation.Line)___"
Write-Verbose "Entering script body"
if ($ScriptPath) {
Set-Location $ScriptPath
Write-Verbose "Working directory: $pwd"
}
If (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Warning "This script must be run with elevated privileges."
Write-Warning "Restarting as an elevated process."
Write-Warning "You will be prompted for authorization."
Write-Warning "You may click 'No' and re-run manually, if you prefer."
If ((Get-WmiObject Win32_OperatingSystem | select BuildNumber).BuildNumber -ge 6000) {
Write-Verbose "This is a UAC-enabled system. Elevating ..."
$CommandLine = "$($MyInvocation.Line.Replace($MyInvocation.InvocationName, $MyInvocation.MyCommand.Definition)) -ScriptPath $pwd"
Write-Verbose "CommandLine: $CommandLine"
Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList "$CommandLine"
} else {
Write-Verbose "The system does not support UAC: an elevated process cannot be started."
Write-Warning "This script requires administrative privileges. Please re-run with administrative account."
}
Break
}
Write-Verbose "The script is now running with elevated privileges."
#endregion ----- Ensure-ProcessIsElevated -----
New-EventLog -LogName Application -Source $eventSource
Write-Host "...installation complete..."
}
我使用的是 PowerShell 4.0。
【问题讨论】:
标签: powershell