Недавно я работал над проектом, в котором я пытаюсь создать GUI для моих скриптов Powershell. Несмотря на то, что, кажется, существует множество возможностей, я нашел один способ сделать это, разработанный Microsoft PFE: Chris Conte .
Если вы, ребята, заинтересованы, вы можете найти статью здесь .
Теперь мой вопрос связан, в частности, со скриптом loadDialog.ps1
, который по сути является связующим звеном между формой XAML и вашим оригинальным скриптом Powershell. Вот код:
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True,Position=1)]
[string]$XamlPath
)
[xml]$Global:xmlWPF = Get-Content -Path $XamlPath
#Add WPF and Windows Forms assemblies
try{
Add-Type -AssemblyName PresentationCore,PresentationFramework,WindowsBase,system.windows.forms
} catch {
Throw "Failed to load Windows Presentation Framework assemblies."
}
#Create the XAML reader using a new XML node reader
$Global:xamGUI = [Windows.Markup.XamlReader]::Load((new-object System.Xml.XmlNodeReader $xmlWPF))
#Create hooks to each named object in the XAML
$xmlWPF.SelectNodes("//*[@Name]") | %{
Set-Variable -Name ($_.Name) -Value $xamGUI.FindName($_.Name) -Scope Global
}
Поскольку $xamGUI
и вновь созданные переменные, захваченные средством чтения XAML, используются сценариями, я могу понять их глобальную область действия. Мой вопрос относится к этой строке:
[xml]$Global:xmlWPF = Get-Content -Path $XamlPath
Почему он использует глобальную область видимости? Это на случай, если мы захотим использовать его где-нибудь еще или я что-то упустил? Я все еще новичок в среде Powershell, и у автора фрагмента явно есть известность в мире Powershell, поэтому я предполагаю, что есть причина для этого заявления, но я не могу понять, что это такое.