src/GUI/Main.ps1
|
#Requires -Version 5.0 <# .SYNOPSIS ps12exeGUI 是 ps12exe 的 GUI 工具。 .DESCRIPTION ps12exeGUI 是 ps12exe 的 GUI 工具。 .PARAMETER ConfigFile 配置文件的路径。 .PARAMETER PS1File 脚本文件的路径。 .PARAMETER Locale 要使用的语言代码。 .PARAMETER UIMode 要使用的 UI 模式。 .PARAMETER help 显示此帮助信息。 .EXAMPLE ps12exeGUI -Locale 'en-UK' -UIMode 'Light' .EXAMPLE ps12exeGUI -ConfigFile 'proj.psccfg' -Locale 'en-UK' -UIMode 'Dark' .EXAMPLE ps12exeGUI -help #> [CmdletBinding(DefaultParameterSetName = 'ConfigOrPS1File')] param( [Parameter(DontShow, ParameterSetName = 'ConfigOrPS1File', Position = 0)] [ValidatePattern('^.*\.(psccfg|xml|ps1)$')] [string]$ConfigOrPS1File, [Parameter(Mandatory, ParameterSetName = 'ConfigFile', Position = 0)] [ValidatePattern('^.*\.(psccfg|xml)$')] [string]$ConfigFile, [Parameter(ParameterSetName = 'ConfigFile')] [Parameter(Mandatory, ParameterSetName = 'Ps1File', Position = 0)] [ValidatePattern('^.*\.ps1$')] [string]$PS1File, #_if PSScript [ArgumentCompleter({ Param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) . "$PSScriptRoot\..\LocaleArgCompleter.ps1" @PSBoundParameters })] #_endif [string]$Locale, [ValidateSet('Light', 'Dark', 'Auto')] [string]$UIMode = 'Auto', [switch]$help ) #_if PSScript if ($help) { $LocalizeData = . $PSScriptRoot\..\LocaleLoader.ps1 -Locale $Locale $MyHelp = $LocalizeData.GUIHelpData . $PSScriptRoot\..\HelpShower.ps1 -HelpData $MyHelp | Write-Host return } if ($ConfigOrPS1File) { if ($ConfigOrPS1File -match '\.ps1$') { $PSBoundParameters.PS1File = $ConfigOrPS1File } else { $PSBoundParameters.ConfigFile = $ConfigOrPS1File } $PSBoundParameters.Remove('ConfigOrPS1File') | Out-Null } try { # 设置控制台窗口标题 $BackUpTitle = $Host.UI.RawUI.WindowTitle $Host.UI.RawUI.WindowTitle = "ps12exe GUI Console Host" # 初始化 STA Runspace $Runspace = [RunspaceFactory]::CreateRunspace() $Runspace.ApartmentState = 'STA' $Runspace.ThreadOptions = 'ReuseThread' $Runspace.Open() # 执行 $pwsh = [PowerShell]::Create().AddScript({ param ($ScriptRoot, $ConfigFile, $Locale, $UIMode, $PS1File, $help) . "$ScriptRoot\GUIMainScript.ps1" }).AddParameter('ScriptRoot', $PSScriptRoot) foreach ($param in $PSBoundParameters.Keys) { $pwsh = $pwsh.AddParameter($param, $PSBoundParameters[$param]) } $pwsh.RunSpace = $Runspace $pwsh.Invoke() } finally { # 释放 $Runspace.Close() $Runspace.Dispose() $pwsh.Dispose() # 恢复控制台窗口标题 $Host.UI.RawUI.WindowTitle = $BackUpTitle } #_else #_require ps12exe #_pragma App.Windowed #_pragma Resources.iconFile $PSScriptRoot/../../img/icon.ico #_pragma Resources.title ps12exeGUI #_pragma Resources.description 'A super cool GUI for compile powershell scripts' #_!!if (!(Test-Path -LiteralPath "Registry::HKEY_CURRENT_USER\Software\Classes\ps12exeGUI.psccfg")){ #_!! Set-ps12exeContextMenu 1 #_!!} #_!!ps12exeGUI @PSBoundParameters #_endif |