Я ищу возможность открыть форму WPF через фоновое задание PowerShell.
Я пробовал другой метод, но не смог. Итак, ищу вашей помощи.
Я мог бы вывести обычную форму windows, но проблемы возникают, когда я решаю использовать WPF. Код работает нормально без фонового задания.
Вот мой полный код PowerShell, который будет работать в фоновом режиме. Ваша помощь будет очень признательна. Заранее спасибо.
Приведенный ниже код сохранен в файле "BackgroundJob.ps1". И этот файл вызывается из функции Show-Popups, упомянутой ниже.
[cmdletbinding()]
Param($TaskName,$ScriptPath)
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
[xml]$xaml =@"
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPFScrollViewerSample"
Name="window" WindowStyle="None" Height="250" Width="500"
ResizeMode="noresize" ShowInTaskbar="False" WindowStartupLocation="Manual"
>
<Window.Resources>
<Style TargetType="GridViewColumnHeader">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="White"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="GridViewColumnHeader">
<Border Background="#313130">
<ContentPresenter></ContentPresenter>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid Name="grid" Background="#313130" Height="250" Width="500">
<Label Name="Label" Content="" Foreground="White" FontSize="15" Margin="70,100,0,0"/>
<Button Name="Dismiss" Content="Dismiss" HorizontalAlignment="Left" Margin="250,170,0,0" VerticalAlignment="Top" Width="80" Height="24" Background="Gray" Foreground="White"/>
<Button Name="Yes" Content="Yes" HorizontalAlignment="Left" Margin="150,170,0,0" VerticalAlignment="Top" Width="80" Height="24" Background="Gray" Foreground="White"/>
</Grid>
</Window>
"@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
try{$Pop_op=[Windows.Markup.XamlReader]::Load( $reader )}
catch{Write-Host "Unable to load Windows.Markup.XamlReader."; break}
$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name ($_.Name) -Value $Pop_op.FindName($_.Name)}
#Yes Button Event
$Yes.add_click({
#Import data in DB
#Export Runtime Logs
if([string]::IsNullOrEmpty($Error)){
$Error | Out-File -FilePath "$env:temp\RuntimeError.log" -Force -Append
}
$Error.Clear()
#Close Form
$Pop_op.Close()
})
#Dismiss Button Event
$Dismiss.add_click({
$Pop_op.Close()
})
$Pop_op.Left = $([System.Windows.SystemParameters]::WorkArea.Width-$Pop_op.Width)
$Pop_op.Top = $([System.Windows.SystemParameters]::WorkArea.Height-$Pop_op.Height)
$Label.Content ='Do you wants to perform '+$TaskName + '?'
#$Pop_op.Show();$Pop_op.Activate()
$Pop_op.ShowDialog() #| Out-Null
if([string]::IsNullOrEmpty($Error)){
$Error | Out-File -FilePath "$env:temp\RuntimeError.log" -Force -Append
}
Вот код для создания фонового задания
Start-Job -ScriptBlock {
Import-Module "C:\Data\MyFunctions.ps1" -Force
Show-Popups -ScriptPath 'C:\Data'
}
Show-Popups - это функция для вызова фона Powershell скрипт задания "BackgroundJob.ps1".