Hallo zusammen,
ich habe beruflich ein Projekt bekommen. Dazu habe ich ein Benachrichtigung PopUp für die Mitarbeiter geschrieben.
Dieses läuft in der ISE ohne Probleme. Aber sobald ich das Skript über die powershell.exe starte, startet der Timer nicht.
Ich werde irre, ich verstehe nicht warum das so ist.
Hier die Timer funktion:
#function Timer_Tick $Script:Timer = New-Object System.Windows.Forms.Timer $global:timer.Interval = 1000 Function Timer_Tick() { # Add text with countdown value in the label $Label.Text = "Dieses Fenster wird in $Script:CountDown Sekunden geschlossen." --$Script:CountDown If ($Script:CountDown -lt 0) { $global:timer.Stop(); $global:form.Add_Closing({$_.Cancel = $false}); $global:form.Close(); $global:timer.Dispose(); $Script:CountDown = 10 } }
Hier der Code für das WPF:
$TitleIcon = @' '@ $ITLogoImg = @' '@ $ImageImg = @' '@ #Load required libraries Add-Type -AssemblyName PresentationFramework, PresentationCore, WindowsBase, System.Windows.Forms, System.Drawing # Bildschirmgröße ermitteln$global:Screen $global:Screen = ([System.Windows.Forms.Screen]::AllScreens |? Primary).Bounds.Size function DecodeBase64Image { param ( [Parameter(Mandatory=$true)] [String]$ImageBase64 ) $ObjBitmapImage = New-Object System.Windows.Media.Imaging.BitmapImage $ObjBitmapImage.BeginInit() #Signals the start of the BitmapImage initialization. $ObjBitmapImage.StreamSource = [System.IO.MemoryStream][System.Convert]::FromBase64String($ImageBase64) $ObjBitmapImage.EndInit() $ObjBitmapImage.Freeze() $ObjBitmapImage } [xml]$xaml = @" <Window 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:WpfApp8" Title="Wichtiger Hinweis" Height="430" Width="398" SizeToContent="Width" ResizeMode='NoResize' WindowStartupLocation="CenterScreen"><Grid Background="#F6A5A5A5"><Label Content="Liebe Kolleginnen und Kollegen,

der Chrome Browser wird am 05.02.2023 abgeschaltet.

Sie haben die Möglichkeit Ihre Daten aus Chrome in Microsoft Edge zu importieren.
Klicken Sie dazu auf Software Center, und wählen dort Import Chrome.

Wenn Sie den Import zu einem späteren Zeitpunkt durchführen möchten,
oder schon importiert haben,klicken Sie auf OK." Name='Label_Text' HorizontalAlignment="Center" Margin="25,10,0,0" VerticalAlignment="Top" Height="234" Width="748" FontSize="14.5" FontWeight="Bold"/><Image Name='ITLogo' HorizontalAlignment="Right" Height="75" VerticalAlignment="Top" Width="75" Margin="0,305,15,0"/><Image Name='Image' HorizontalAlignment="Right" Height="150" VerticalAlignment="Top" Width="250" Margin="0,220,305,0"/><Button x:Name="Button1" Content="OK" HorizontalAlignment="Left" Margin="29,305,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.393,0.489" Width="130 " Height="40" FontFamily="Arial" FontSize="15" FontWeight="Bold" Background="#FF90EE90"/><Button x:Name="Button2" Content="Software Center" HorizontalAlignment="Left" Margin="29,255,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.393,0.489" Width="130 " Height="40" FontFamily="Arial" FontSize="15" FontWeight="Bold" Background="#FF90EE90"/><StatusBar Height="30" HorizontalAlignment="Stretch" VerticalAlignment="Bottom"><StatusBarItem HorizontalAlignment="Right"><StackPanel Orientation="Horizontal"><Label Name="Label_Close" Foreground="Black" Content="" Margin="0,0,380,0" VerticalAlignment="Top" HorizontalContentAlignment="Left"/><TextBlock Name='Label' HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,0,15,0" Foreground='Black' FontSize="18"/></StackPanel></StatusBarItem></StatusBar></Grid></Window>"@ #Read the form $Reader = (New-Object System.Xml.XmlNodeReader $xaml) $global:form = [Windows.Markup.XamlReader]::Load($reader) $global:form.Topmost = $True $global:form.Add_Closing({$_.Cancel = $true}) #AutoFind all controls $xaml.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | ForEach-Object { New-Variable -Name $_.Name -Value $global:form.FindName($_.Name) -Force } #Button1 $Button1 = $global:form.FindName('Button1') $Button1.add_click({ Remove-Item $BookmarkPath -force $backgroundColor = (Get-Random -InputObject @("white")) $Button1.background = $backgroundColor $global:form.Add_Closing({$_.Cancel = $false}) $global:form.Close() }) #Button2 $Button2 = $global:form.FindName('Button2') $Button2.add_click({ $SW = Start-Process "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Endpoint Manager\Configuration Manager\Softwarecenter.lnk" $backgroundColor = (Get-Random -InputObject @("white")) $Button2.background = $backgroundColor Remove-Item $BookmarkPath -force $Button1.Visibility = "Hidden" $Button2.Visibility = "Hidden" $Label_Text.Content = "Starten Sie bitte Import Chrome.`n`nBitte tätigen Sie während des Import Vorgangs, keine Tastatur und Maus Eingabe." $Label.Text = "Dieses Fenster wird in $Script:CountDown Sekunden geschloßen" $Script:CountDown = 10 $global:timer.Add_Tick.invoke({Timer_Tick}) $global:timer.Start() }) $global:form.Icon = DecodeBase64Image -ImageBase64 $TitleIcon $ITLogo.Source = DecodeBase64Image -ImageBase64 $ITLogoImg $Image.Source = DecodeBase64Image -ImageBase64 $ImageImg $ITLogo.Add_MouseEnter({$Label.Text = 'Ihr IT-Services Team'; $Script:url = 'mailto:it-services@heuking.de'}) $Label.Text = "Ihr IT-Services Team" $Label.Add_PreviewMouseDown({[system.Diagnostics.Process]::start($url)}) # Position auf Bildschirm begrenzen $global:form.add_LocationChanged( { if ($this.Left -lt 0){$this.Left = 0} if ($this.Top -lt 0){$this.Top = 0} if ($this.Top + $this.Height -gt $global:Screen.Height){$this.Top = $global:Screen.Height - $this.Height} if ($this.Left + $this.Width -gt $global:Screen.Width){$this.Left = $global:Screen.Width - $this.Width} }) #Mandetory last line of every script to load form $global:form.ShowDialog()
Hat vielleicht jemand ne Idee woran das liegen kann?
Wünsche allen ein schönes Osterfest.
Danke schonmal und viele Grüße
gfritz74