Создание пользовательского интерфейса для сценариев PowerShell

#c# #powershell

Вопрос:

Я создал страницу пользовательского интерфейса, используя формат расширения .xaml, и поместил ее в локальный каталог на своем устройстве. Теперь я хочу использовать эту страницу в сценарии PowerShell.

Файл .xaml выглядит так:

 lt;Window x:Class="PoshGUI_sample.MainWindow"  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  xmlns:local="clr-namespace:PoshGUI_sample"  mc:Ignorable="d"  Title="Disk Information" Height="326" Width="403"gt; lt;Gridgt;   lt;StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Center"gt;  lt;Label Content="Computer Name:" VerticalAlignment="Center" Margin="10,10, 0, 0"/gt;  lt;TextBox Name="txtComputer" Text="" VerticalAlignment="Center" Height="23" Width="174" Margin="0, 10, 10, 0"/gt;  lt;Button Name="btnQuery" VerticalAlignment="Center" Content="Query" Margin="5, 15, 10, 5" Height="18" Width="59"/gt;   lt;/StackPanelgt;  lt;TextBox HorizontalAlignment="Center" Name="txtResults" Text="" IsReadOnly="True" Margin="10,60,0,0" Height="225" Width="373"/gt; lt;/Gridgt;  

Сценарий, который я пробовал:

 Add-Type -AssemblyName PresentationFramework  Function Get-FixedDisk {  [CmdletBinding()]  param (  # Parameter help description  [Parameter(Mandatory)]  [string]$Computer  )   $Diskinfo = Get-WmiObject Win32_LogicalDisk -ComputerName $Computer -Filter 'DriveType=3'  $Diskinfo }  #Locate XAML file $xamlFile = "C:Usersflorian.vosssourcereposPoshGUI-samplePoshGUI-sampleMainWindow.xaml"  #create window $inputXML = Get-Content $xamlFile -Raw $inputXML = $inputXML -replace 'mc:ignorable="d"', '' -replace "x:N", 'N' -replace '^Win.*', 'lt;Window' [xml]$xaml = $inputXML  #Read XAML $reader = (New-Object System.Xml.XmlNodeReader $xaml) try {  $window = [Windows.Markup.XamlReader]::Load( $reader ) } catch {  Write-Warning $_.Exception  throw }  # Create variables based on form control names. # Variable will be named as 'var_lt;control namegt;'  $xaml.SelectNodes("//*[@Name]") | ForEach-Object {  #"trying item $($_.Name)"  try {  Set-Variable -Name "var_$($_.Name)" -Value $window.FindName($_.Name) -ErrorAction Stop  } catch {  throw   } } Get-Variable var_*  $Null = $window.ShowDialog()  

Я предполагаю, что проблема начинается в строке 20 сценария и продолжается в следующих строках, даже если powershell находит ошибку в строке 25 или около того. Я нашел следующую строку 20 в Интернете, так что, вероятно, ее не использовали для моего файла .xaml. Поэтому я ожидаю, что проблема будет в первых строках файла .xaml, который я пытаюсь заменить строкой 20 сценария.

Снимок экрана с ошибкой

Комментарии:

1. Пожалуйста, укажите .xaml,. ps1 и любое сообщение об ошибке в текстовой форме в сообщении. Скриншоты могут быть очень трудными для чтения (особенно на дисплеях HiDPI), не доступны для поиска и не могут быть скопированы, чтобы люди могли попытаться воспроизвести проблему. Также было бы неплохо, если бы вы отформатировали их в виде кода, но в этом мы можем вам помочь, если это необходимо.

2. Я предполагаю, что это было взято из какого-то примера кода в PoshGUI? Возможно, ссылка на него. Я предлагаю вам начать с очень простого XAML и добавлять контент до тех пор, пока вы не определите проблему