#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 и добавлять контент до тех пор, пока вы не определите проблему