FSCorrupted

printinstall

Aug 9th, 2023
7
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $ProgressPreference = 'SilentlyContinue'
  2.  
  3. $Version = "6.8"
  4.  
  5. # Load Icon
  6. # Convert base64 string to bytes
  7. $base64Icon = "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"
  8.  
  9. # Convert base64 string to byte array
  10. $imageBytes = [Convert]::FromBase64String($base64Icon)
  11.  
  12. # Create a temporary file path with .png extension
  13. $tempFilePath = [System.IO.Path]::Combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName() + ".png")
  14.  
  15. # Write the image bytes to the temporary PNG file
  16. [System.IO.File]::WriteAllBytes($tempFilePath, $imageBytes)
  17. $domainContext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext("Domain", $env:USERDNSDOMAIN)
  18. $domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($domainContext)
  19. $PDC = ($domain.PdcRoleOwner).Name
  20.  
  21. if (!(Test-NetConnection -ComputerName $PDC)) {
  22.   $ErrorXML = @'
  23. <Window
  24.  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  25.  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  26.  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  27.  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  28.  xmlns:local="clr-namespace:Error"
  29.  mc:Ignorable="d"
  30.  ResizeMode="NoResize"
  31.  Title="Error" Height="150" Width="400"
  32.   <Grid>   
  33.    <Button x:Name="exitUI" Content="Exit" HorizontalAlignment="center" Margin="10" VerticalAlignment="Bottom" Height="30" Width="80"/>
  34.    <TextBlock Text="Es konnte keine Verbindung zum Druckserver hergestellt werden, bitte mit VPN verbinden." TextWrapping="Wrap" VerticalAlignment="Top" Foreground="red" FontSize="16" FontWeight="Bold" Margin="10" />
  35.   </Grid>  
  36. </Window>
  37. '@
  38.  
  39.   $ErrorXML = $ErrorXML -replace 'mc:Ignorable="d"', '' -replace 'x:N', 'N'  -replace '^<Win.*', '<Window'
  40.  
  41.   [void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
  42.   [xml]$ErrorXAML = $ErrorXML
  43.  
  44.   #Read XAML
  45.   $ErrorReader = (New-Object -TypeName System.Xml.XmlNodeReader -ArgumentList $ErrorXAML)
  46.   try
  47.   {
  48.     $ErrorForm = [Windows.Markup.XamlReader]::Load( $ErrorReader )
  49.   }
  50.   catch
  51.   {
  52.     Write-Host -Object 'Unable to load Windows.Markup.XamlReader. Double-check syntax and ensure .net is installed.'
  53.   }
  54.  
  55.   #===========================================================================
  56.   # Store Form Objects In PowerShell
  57.   #===========================================================================
  58.   $ErrorXAML.SelectNodes('//*[@Name]') | ForEach-Object -Process {
  59.     Set-Variable -Name ($_.Name) -Value $ErrorForm.FindName($_.Name)
  60.   }
  61.   $ErrorForm.WindowStartupLocation = [Windows.WindowStartupLocation]::CenterScreen
  62.   #Load Icon
  63.   $ErrorForm.Icon = $tempFilePath
  64.   #===========================================================================
  65.   # Add events to Form Objects
  66.   #=========================================================================== 
  67.   $exitUI.Add_Click({
  68.       $ErrorForm.DialogResult = $false
  69.       Exit
  70.   })
  71.  
  72.   $ErrorFormEnd = $ErrorForm.ShowDialog() #| Out-Null
  73. }
  74.  
  75. #===========================================================================
  76. # Add events to Form Objects
  77. #===========================================================================   
  78. # Start Loading Xaml
  79. $LoadingXaml = @'  
  80. <Window
  81.   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  82.   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  83.   xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"  
  84.   MinWidth="200"  
  85.   Width ="550"
  86.   ResizeMode="NoResize"
  87.   Title="Druckerauswahl"  
  88.   Topmost="True" Height="140">  
  89.    <Grid>
  90.        <Label Content="Verfügbare Drucker werden ermittelt, bitte haben Sie etwas Geduld..." HorizontalAlignment="Left" Margin="20,3,0,0" VerticalAlignment="Top" FontSize="16"/>  
  91.        <ProgressBar Height="20" Margin="20,54,20,0" VerticalAlignment="Top" Minimum="0" Maximum="100" Value="0" Name="pbStatusTotal"/>  
  92.        <TextBlock Text="{Binding ElementName=pbStatusTotal, Path=Value, StringFormat={}{0:0}%}" HorizontalAlignment="Center" Margin="20,36,20,0" />  
  93.    </Grid>
  94. </Window>
  95. '@  
  96. #endregion
  97.  
  98. #region Code Behind
  99. function Convert-XAMLtoWindow {
  100.   param
  101.   (
  102.     [Parameter(Mandatory=$true)]
  103.     [string]
  104.     $LoadingXaml
  105.   )
  106.  
  107.   Add-Type -AssemblyName PresentationFramework
  108.  
  109.   $reader = [XML.XMLReader]::Create([IO.StringReader]$LoadingXaml)
  110.   $result = [Windows.Markup.XAMLReader]::Load($reader)
  111.   $reader.Close()
  112.   $reader = [XML.XMLReader]::Create([IO.StringReader]$LoadingXaml)
  113.   while ($reader.Read())
  114.   {
  115.     $name=$reader.GetAttribute('Name')  
  116.     if (!$name) { $name=$reader.GetAttribute('x:Name') }  
  117.     if($name)
  118.     {$result | Add-Member NoteProperty -Name $name -Value $result.FindName($name) -Force}
  119.   }
  120.   $reader.Close()
  121.   $result
  122. }
  123.  
  124. function Show-WPFWindow {
  125.   param
  126.   (
  127.     [Parameter(Mandatory=$true)]
  128.     [Windows.Window]
  129.     $Window
  130.   )
  131.  
  132.   $result = $null
  133.   $null = $window.Dispatcher.InvokeAsync{
  134.     $result = $window.ShowDialog()
  135.     Set-Variable -Name result -Value $result -Scope 1
  136.   }.Wait()
  137.   $result
  138. }
  139. #endregion Code Behind
  140.  
  141. #region Convert XAML to Window
  142. $loadingwindow = Convert-XAMLtoWindow -LoadingXaml $LoadingXaml
  143. $loadingwindow.WindowStartupLocation = [Windows.WindowStartupLocation]::CenterScreen
  144. #endregion
  145.  
  146. #region Manipulate Window Content
  147. $pbStatusTotal = $loadingwindow.FindName('pbStatusTotal')  
  148. $pbStatusTotal.Value = 0
  149. #endregion
  150.  
  151. #Load Icon
  152. $loadingwindow.Icon = $tempFilePath
  153.  
  154. $syncHash = [hashtable]::Synchronized(@{})
  155. $syncHash.pbValue = 0
  156.  
  157. $newRunspace = [runspacefactory]::CreateRunspace()
  158. $newRunspace.ApartmentState = "STA"  
  159. $newRunspace.ThreadOptions = "ReuseThread"  
  160. $newRunspace.Open()
  161. $newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash)  
  162.  
  163. $newPowershell = [powershell]::Create()
  164. $syncHash.Printers = @()
  165. $syncHash.localobjResult = @()
  166. $newPowershell.AddScript({
  167.     $domainContext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext("Domain", $env:USERDNSDOMAIN)
  168.     $domain = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($domainContext)
  169.     $PDC = ($domain.PdcRoleOwner).Name
  170.     $SearchString = "LDAP://"
  171.     $SearchString += $PDC + "/"
  172.     $DistinguishedName = "DC=$($domain.name.Replace('.', ',DC='))"
  173.     $SearchString += $DistinguishedName
  174.     $Searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]$SearchString)
  175.     $Searcher.Filter = '(&(objectCategory=printqueue)(description=*\*))'
  176.     $Searcher.PropertiesToLoad.Add("ServerName") | Out-Null
  177.     $Searcher.PropertiesToLoad.Add("location") | Out-Null
  178.     $Searcher.PropertiesToLoad.Add("Name") | Out-Null
  179.     $Searcher.PropertiesToLoad.Add("Description") | Out-Null
  180.     $Searcher.PropertiesToLoad.Add("uNCName") | Out-Null
  181.     $results = $Searcher.FindAll()
  182.  
  183.     #Installed Printer
  184.     $localprinters = Get-Printer
  185.     $Defaultprinter = (Get-WmiObject -Class win32_printer | Where-Object -FilterScript { $_.Default -eq $True }).name
  186.  
  187.     $totalentries = $results.Count + $localprinters.count
  188.     $processedentries = 0
  189.    
  190.     $objTemplate = '' | Select-Object -Property Company, Group, Model, location, servername, uncname
  191.     $objResult = @()
  192.  
  193.     foreach ($result in $results){
  194.       $objTemp = $objTemplate | Select-Object *
  195.      
  196.       $processedentries++
  197.  
  198.       $objTemp.Company = $result.Properties.description.split('\')[0]
  199.       $objTemp.Group = if ($result.Properties.description -match '^[^\\]+\\[^\\]+\\'){$result.Properties.description.split('\')[1]}
  200.       $objTemp.Model = $result.Properties.description.split('\')[2]
  201.       $objTemp.Location = $result.Properties.location
  202.       $objTemp.servername = $result.Properties.servername
  203.       $objTemp.uncname = $result.Properties.uncname
  204.       $objResult += $objTemp
  205.      
  206.       # Update progress
  207.       $syncHash.pbValue = ($processedentries / $totalentries) * 100
  208.     }
  209.     $syncHash.Printers = $objResult
  210.    
  211.     $localobjTemplate = '' | Select-Object -Property Type, Name, Comment, Location, Default
  212.     $localobjResult = @()
  213.     $EmojiNetwork = "🌍"
  214.     $EmojiFollow = [System.Convert]::toInt32("1F463",16)
  215.     $EmojiLocal = [System.Convert]::toInt32("1F4C2",16)
  216.  
  217.     foreach ($localresult in $localprinters){
  218.       $localobjTemp = $localobjTemplate | Select-Object *
  219.      
  220.       $processedentries++
  221.      
  222.       $localobjTemp.Default = if ($localresult.name -match [regex]::Escape($Defaultprinter)) { $True } Else {$False}
  223.       $localobjTemp.Type = if ($localresult.Type -eq 'Local'){[System.Char]::ConvertFromUtf32($EmojiLocal)+$localresult.Type}Elseif($localresult.Type -eq 'Connection' -and ($localresult.ComputerName -eq 'konicaprint01p' -or $localresult.Name -match 'Canon-Secure-Print')){[System.Char]::ConvertFromUtf32($EmojiFollow)+"FollowMe"}Else{$EmojiNetwork+"Netz"}
  224.       $localobjTemp.Name = $localresult.Name
  225.       $localobjTemp.Comment = $localresult.Comment.split('\')[2]
  226.       $localobjTemp.Location = $localresult.location
  227.  
  228.       $localobjResult += $localobjTemp
  229.       $syncHash.pbValue = ($processedentries / $totalentries) * 100
  230.     }
  231.    
  232.    
  233.     $syncHash.localobjResult = $localobjResult
  234. }) | out-null
  235.  
  236. # create dispatcher timer on window
  237. $loadingwindow.add_SourceInitialized({
  238.     $timer = New-Object System.Windows.Threading.DispatcherTimer
  239.     $timer.Interval = [Timespan]'0:0:0.10'  
  240.     # timer action update progressbar value
  241.     $timer.Add_Tick({
  242.         $pbStatusTotal.Value = $syncHash.pbValue
  243.  
  244.         # Check if progress reached 100%
  245.         if ($syncHash.pbValue -ge 100) {
  246.           $loadingwindow.Close()
  247.         }
  248.     })
  249.     $timer.Start()
  250. })
  251.  
  252. # assign runspace and start script
  253. $newPowershell.Runspace = $newRunspace
  254. $handle = $newPowershell.BeginInvoke()
  255.  
  256. # Show Window
  257. $result = Show-WPFWindow -Window $loadingwindow
  258.  
  259. # Wait for PowerShell job to complete
  260. $newPowershell.EndInvoke($handle)
  261.  
  262. $printers = $syncHash.Printers
  263. $localobjResult = $syncHash.localobjResult
  264.  
  265. #==============================================================================================
  266. # XAML Code
  267. #==============================================================================================
  268. $inputXML = @'
  269. <Window
  270.    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  271.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  272.    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  273.    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  274.    xmlns:local="clr-namespace:Druckerauswahl"
  275.    mc:Ignorable="d"
  276.    ResizeMode="NoResize"
  277.    Title="" Height="750" Width="1100" Background="#F0F0F0">
  278.  
  279.     <Grid Margin="0,0,-0.2,0.2">   
  280.         <TextBox HorizontalAlignment="Left" Text="Firma" BorderThickness="0" Width="60" Margin="5,5,0,0" Height="23" TextWrapping="Wrap" IsReadOnly="True" VerticalAlignment="Top" TextAlignment="Center" Foreground="#000000" Background="#F0F0F0" BorderBrush="#F0F0F0" />     
  281.         <TextBox HorizontalAlignment="Left" Text="Hinweis:" BorderThickness="0" Width="60" Margin="294,5,0,0" Height="23" TextWrapping="Wrap" IsReadOnly="True" VerticalAlignment="Top" TextAlignment="Left" Foreground="#000000" Background="#F0F0F0" BorderBrush="#F0F0F0"/>   
  282.         <TextBox HorizontalAlignment="Left" Height="23" BorderThickness="0" TextWrapping="Wrap" IsReadOnly="True" Text="Neue Netzwerkdrucker:" VerticalAlignment="Top" Width="610" Margin="10,110,0,0" TextAlignment="Left" Foreground="#000000" Background="#F0F0F0" BorderBrush="#F0F0F0"/>    
  283.         <TextBox HorizontalAlignment="Left" Height="23" BorderThickness="0" TextWrapping="Wrap" IsReadOnly="True" Text="Installierte Drucker (Standarddrucker ist der grün Markierte):" VerticalAlignment="Top" Width="610" Margin="10,365,0,0" TextAlignment="Left" Foreground="#000000" Background="#F0F0F0" BorderBrush="#F0F0F0"/>  
  284.         <TextBox x:Name="hint" HorizontalAlignment="Left" Height="50" BorderThickness="0" TextWrapping="Wrap" IsReadOnly="True" Text="" VerticalAlignment="Top" Width="450" Margin="294,30,0,0" TextAlignment="Left" Foreground="blue" Background="#F0F0F0" FontWeight="Bold" BorderBrush="#F0F0F0"/>    
  285.        <Button x:Name="addprinter" Content="Drucker hinzufügen" HorizontalAlignment="Left" Margin="850,133,0,0" VerticalAlignment="Top" Height="30" Foreground="#000000" Width="200"/>
  286.         <TextBox HorizontalAlignment="Left" Text="Hinweis:" BorderThickness="0" Width="60" Margin="850,170,0,0" Height="23" TextWrapping="Wrap" IsReadOnly="True" VerticalAlignment="Top" TextAlignment="Left" Foreground="#000000" Background="#F0F0F0" BorderBrush="#F0F0F0"/>     
  287.        <TextBox HorizontalAlignment="Left" Height="40" BorderThickness="0" TextWrapping="Wrap" IsReadOnly="True" Text="Während dieser Aktion ist die Benutzeroberfläche nicht bedienbar." VerticalAlignment="Top" Width="200" Margin="850,190,0,0" TextAlignment="Left" Foreground="#000000" Background="#F0F0F0" BorderBrush="#F0F0F0"/>
  288.         <TextBox Height="38" BorderThickness="0" IsReadOnly="True" FontSize="32" Text="POCSO" FontFamily="Futura Lt BT" Width="115" Margin="900,622,0,0" TextAlignment="Left" Foreground="#E9E9E9" Background="#C0C0C0" BorderBrush="#C0C0C0" HorizontalAlignment="Left" VerticalAlignment="Top" />  
  289.         <TextBox x:Name="ver" HorizontalAlignment="Left" Text="" BorderThickness="0" Width="150" Margin="898,662,0,0" Height="40" TextWrapping="Wrap" IsReadOnly="True" VerticalAlignment="Top" TextAlignment="Left" Foreground="#000000" Background="#F0F0F0" BorderBrush="#F0F0F0"/>   
  290.        <TextBox x:Name="doing" HorizontalAlignment="Left" Height="23" BorderThickness="0" TextWrapping="Wrap" IsReadOnly="True" Text="" VerticalAlignment="Top" Width="300" Margin="425,636,0,0" TextAlignment="Left" Foreground="blue" FontWeight="Bold" Background="#F0F0F0" BorderBrush="#F0F0F0"/>        
  291.        <Button x:Name="setasdefault" Content="Als Standard definieren" HorizontalAlignment="Left" Margin="10,630,0,0" VerticalAlignment="Top" Height="30" Foreground="#000000" Width="200"/>
  292.        <Button x:Name="deleteprinter" Content="Drucker löschen" HorizontalAlignment="Left" Margin="215,630,0,0" VerticalAlignment="Top" Height="30" Foreground="#000000" Width="200"/>
  293.        <Button x:Name="exit" Content="Exit" HorizontalAlignment="Left" Margin="740,630,0,0" VerticalAlignment="Top" Height="30" Foreground="#000000" Width="80"/>
  294.        <StackPanel>
  295.            <ListBox x:Name="mainListBox" Height="100" Width="100" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="70,5,0,0">
  296.                <ListBox.ItemTemplate>
  297.                    <DataTemplate>
  298.                        <TextBlock Text="{Binding Name}"/>
  299.                    </DataTemplate>
  300.                </ListBox.ItemTemplate>
  301.            </ListBox>
  302.            <ListView x:Name="listView" HorizontalAlignment="Left" Height="208" Margin="10,28,0,0" VerticalAlignment="top" Width="810">
  303.                <ListView.View>
  304.                    <GridView>
  305.                        <GridViewColumn Header="Druckerstandort" DisplayMemberBinding="{Binding Druckerstandort}" Width="300"/>
  306.                        <GridViewColumn Header="Beschreibung" DisplayMemberBinding="{Binding Beschreibung}" Width="200"/>
  307.                        <GridViewColumn Header="Share" DisplayMemberBinding="{Binding Share}" Width="380"/>
  308.                    </GridView>
  309.                </ListView.View>
  310.            </ListView>
  311.            <ListView x:Name="secondlistView" HorizontalAlignment="Left" Height="232" Margin="10,48,0,0" VerticalAlignment="top" Width="810">
  312.                <ListView.View>
  313.                    <GridView>
  314.                        <GridViewColumn Header="Art" DisplayMemberBinding="{Binding Art}" />
  315.                        <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
  316.                        <GridViewColumn Header="Beschreibung" DisplayMemberBinding="{Binding Beschreibung}" />
  317.                        <GridViewColumn Header="Druckerstandort" DisplayMemberBinding="{Binding Druckerstandort}" />
  318.                    </GridView>
  319.                </ListView.View>
  320.            </ListView>
  321.        </StackPanel>
  322.    </Grid>
  323. </Window>
  324. '@    
  325. $inputXML = $inputXML -replace 'mc:Ignorable="d"', '' -replace 'x:N', 'N'  -replace '^<Win.*', '<Window'
  326.  
  327. [void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
  328. [xml]$XAML = $inputXML
  329.  
  330. #Read XAML
  331. $reader = (New-Object -TypeName System.Xml.XmlNodeReader -ArgumentList $XAML)
  332. try
  333. {
  334.   $Form = [Windows.Markup.XamlReader]::Load( $reader )
  335. }
  336. catch
  337. {
  338.   Write-Host -Object 'Unable to load Windows.Markup.XamlReader. Double-check syntax and ensure .net is installed.'
  339. }
  340.  
  341. #===========================================================================
  342. # Store Form Objects In PowerShell
  343. #===========================================================================
  344. $XAML.SelectNodes('//*[@Name]') | ForEach-Object -Process {
  345.   Set-Variable -Name ($_.Name) -Value $Form.FindName($_.Name)
  346. }
  347.  
  348. #Load Icon
  349. $Form.Icon = $tempFilePath
  350.  
  351. $exit.Add_Click({
  352.     $Form.DialogResult = $false
  353.     Exit
  354. })
  355.  
  356. $defaulthintText = "Wählen Sie den gewünschten Drucker aus (Liste nach Ort sortiert)`nÜber die Schaltfläche können sie hinzugefügt werden."
  357. $addprinterhintText = "Drucker wird hinzugefügt, bitte warten..."
  358. $addmultipleprinterhintText = "Drucker werden hinzugefügt, bitte warten..."
  359. $defaultaddprinterText = "Drucker wurde hinzugefügt..."
  360. $multipleaddprinterText = "Drucker wurden hinzugefügt..."
  361. $defaultprinterchangedText = "Standard Drucker wurde geändert..."
  362. $defaultprinterdeleteText = "Drucker wurde entfernt..."
  363. $versionText = "Ver. $Version`n© Porsche Informatik"
  364. $ver.Text = $versionText
  365. $hint.Text = $defaulthintText
  366.  
  367. function AddPrinter_Click {
  368.   $selectedPrinters = $Form.FindName("listView").SelectedItems
  369.   $syncHash = [hashtable]::Synchronized(@{})
  370.  
  371.   $newRunspace = [runspacefactory]::CreateRunspace()
  372.   $newRunspace.ApartmentState = "STA"  
  373.   $newRunspace.ThreadOptions = "ReuseThread"  
  374.   $newRunspace.Open()
  375.   $newRunspace.SessionStateProxy.SetVariable("syncHash",$syncHash)  
  376.   $newRunspace.SessionStateProxy.SetVariable("selectedPrinters",$selectedPrinters)
  377.  
  378.   $newPowershell = [powershell]::Create()
  379.   $syncHash.localobjResult = @()
  380.   $newPowershell.AddScript({      
  381.       if ($selectedPrinters -ne $null) {
  382.         foreach ($selectedprinter in $selectedPrinters) {
  383.           if(!(Get-Printer -Name $selectedPrinter.Share -ErrorAction SilentlyContinue)){
  384.             Add-Printer -ConnectionName $selectedPrinter.Share
  385.           }
  386.         }
  387.       }
  388.       $processedentries = 0
  389.       $localprinters = Get-Printer
  390.       $Defaultprinter = (Get-WmiObject -Class win32_printer | Where-Object -FilterScript { $_.Default -eq $True }).name
  391.  
  392.       $localobjTemplate = '' | Select-Object -Property Type, Name, Comment, Location, Default
  393.       $localobjResult = @()
  394.       $EmojiNetwork = "🌍"
  395.       $EmojiFollow = [System.Convert]::toInt32("1F463",16)
  396.       $EmojiLocal = [System.Convert]::toInt32("1F4C2",16)
  397.    
  398.       foreach ($localresult in $localprinters){
  399.         $localobjTemp = $localobjTemplate | Select-Object *
  400.  
  401.         $localobjTemp.Default = if ($localresult.name -match [regex]::Escape($Defaultprinter)) { $True } Else {$False}
  402.         $localobjTemp.Type = if ($localresult.Type -eq 'Local'){[System.Char]::ConvertFromUtf32($EmojiLocal)+$localresult.Type}Elseif($localresult.Type -eq 'Connection' -and ($localresult.ComputerName -eq 'konicaprint01p' -or $localresult.Name -match 'Canon-Secure-Print')){[System.Char]::ConvertFromUtf32($EmojiFollow)+"FollowMe"}Else{$EmojiNetwork+"Netz"}
  403.         $localobjTemp.Name = $localresult.Name
  404.         $localobjTemp.Comment = $localresult.Comment.split('\')[2]
  405.         $localobjTemp.Location = $localresult.location
  406.  
  407.         $localobjResult += $localobjTemp
  408.        }
  409.       $syncHash.localobjResult = $localobjResult
  410.   }) | out-null
  411.  
  412.   # assign runspace and start script
  413.   $newPowershell.Runspace = $newRunspace
  414.   $handle = $newPowershell.BeginInvoke()
  415.  
  416.  
  417.   # Wait for PowerShell job to complete
  418.   $newPowershell.EndInvoke($handle)
  419.  
  420.   $localobjResult = $syncHash.localobjResult
  421.  
  422.   #Refresh UI
  423.   $selectedPrinters = $Form.FindName("listView").SelectedItems  
  424.   $Collection = $Form.FindName("secondlistView")
  425.   $Collection.Foreground = 'black'
  426.   [Array]$output = $localobjResult | Select-Object -Property @{Name='Art';Expression={$_.Type}},@{Name='Name';Expression={$_.Name}}, @{Name='Beschreibung';Expression={$_.Comment}},@{Name='Druckerstandort';Expression={$_.location}},@{Name='Default';Expression={$_.Default}}| Sort-Object Druckerstandort
  427.   $Collection.ItemsSource = $output
  428.   $ListViewItemStyleXAML = @"
  429.  <Style TargetType="ListViewItem" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  430.    <Setter Property="Background" Value="White" />
  431.      <Style.Triggers>
  432.        <DataTrigger Binding="{Binding Default}" Value="true">
  433.          <Setter Property="Background" Value="#D0F6CA" />
  434.         </DataTrigger>
  435.       </Style.Triggers>
  436.   </Style>
  437. "@
  438.  # Parse the XAML definition using PowerShell XML parsing
  439.  $ListViewItemStyle = [Windows.Markup.XamlReader]::Parse($ListViewItemStyleXAML)
  440.  
  441.  # Apply the created Style to the ItemContainerStyle property of the ListView
  442.  $Collection.ItemContainerStyle = $ListViewItemStyle
  443.  $Collection.Items.Refresh()
  444.  $doing.Text = if ($selectedPrinters.count -gt '1'){$multipleaddprinterText}Else{$defaultaddprinterText}
  445. }
  446.  
  447. function SetDefault_Click {
  448.  
  449.  $selectedPrinter = $Form.FindName("secondlistView").SelectedItem
  450.  
  451.  if ($selectedPrinter -ne $null) {
  452.    $PRINTERTMP = Get-CimInstance -ClassName CIM_Printer | Where-Object Name -eq $selectedPrinter.Name
  453.    $PRINTERTMP | Invoke-CimMethod -MethodName SetDefaultPrinter | out-null
  454.  }
  455.      
  456.  $localprinters = Get-Printer
  457.  $Defaultprinter = (Get-WmiObject -Class win32_printer | Where-Object -FilterScript { $_.Default -eq $True }).name
  458.  
  459.  $localobjTemplate = '' | Select-Object -Property Type, Name, Comment, Location, Default
  460.  $localobjResult = @()
  461.  $EmojiNetwork = "🌍"
  462.  $EmojiFollow = [System.Convert]::toInt32("1F463",16)
  463.  $EmojiLocal = [System.Convert]::toInt32("1F4C2",16)
  464.  
  465.  foreach ($localresult in $localprinters){
  466.    $localobjTemp = $localobjTemplate | Select-Object *
  467.  
  468.    $localobjTemp.Default = if ($localresult.name -match [regex]::Escape($Defaultprinter)) { $True } Else {$False}
  469.    $localobjTemp.Type = if ($localresult.Type -eq 'Local'){[System.Char]::ConvertFromUtf32($EmojiLocal)+$localresult.Type}Elseif($localresult.Type -eq 'Connection' -and ($localresult.ComputerName -eq 'konicaprint01p' -or $localresult.Name -match 'Canon-Secure-Print')){[System.Char]::ConvertFromUtf32($EmojiFollow)+"FollowMe"}Else{$EmojiNetwork+"Netz"}
  470.    $localobjTemp.Name = $localresult.Name
  471.    $localobjTemp.Comment = $localresult.Comment.split('\')[2]
  472.    $localobjTemp.Location = $localresult.location
  473.  
  474.    $localobjResult += $localobjTemp
  475.  }
  476.  $Collection = $Form.FindName("secondlistView")
  477.  $Collection.Foreground = 'black'
  478.  [Array]$output = $localobjResult | Select-Object -Property @{Name='Art';Expression={$_.Type}},@{Name='Name';Expression={$_.Name}}, @{Name='Beschreibung';Expression={$_.Comment}},@{Name='Druckerstandort';Expression={$_.location}},@{Name='Default';Expression={$_.Default}}| Sort-Object Druckerstandort
  479.  $Collection.ItemsSource = $output
  480.  
  481.  # Create the ListViewItem Style using XAML-based definition
  482.  $ListViewItemStyleXAML = @"
  483.     <Style TargetType="ListViewItem" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  484.       <Setter Property="Background" Value="White" />
  485.         <Style.Triggers>
  486.           <DataTrigger Binding="{Binding Default}" Value="true">
  487.             <Setter Property="Background" Value="#D0F6CA" />
  488.           </DataTrigger>
  489.         </Style.Triggers>
  490.     </Style>
  491. "@
  492.  
  493.  # Parse the XAML definition using PowerShell XML parsing
  494.  $ListViewItemStyle = [Windows.Markup.XamlReader]::Parse($ListViewItemStyleXAML)
  495.  
  496.  # Apply the created Style to the ItemContainerStyle property of the ListView
  497.  $Collection.ItemContainerStyle = $ListViewItemStyle
  498.  $Collection.Items.Refresh()
  499.  $doing.Text = $defaultprinterchangedText
  500. }
  501.  
  502. function RemovePrinter_Click {
  503.  $selectedPrinters = $Form.FindName("secondlistView").SelectedItems
  504.  
  505.  if ($selectedPrinters -ne $null) {
  506.    foreach ($selectedprinter in $selectedPrinters) {
  507.      Remove-Printer -Name $selectedPrinter.Name
  508.    }
  509.  }
  510.      
  511.  $localprinters = Get-Printer
  512.  $Defaultprinter = (Get-WmiObject -Class win32_printer | Where-Object -FilterScript { $_.Default -eq $True }).name
  513.  
  514.  $localobjTemplate = '' | Select-Object -Property Type, Name, Comment, Location, Default
  515.  $localobjResult = @()
  516.  $EmojiNetwork = "🌍"
  517.  $EmojiFollow = [System.Convert]::toInt32("1F463",16)
  518.  $EmojiLocal = [System.Convert]::toInt32("1F4C2",16)
  519.  
  520.  foreach ($localresult in $localprinters){
  521.    $localobjTemp = $localobjTemplate | Select-Object *
  522.  
  523.    $localobjTemp.Default = if ($localresult.name -match [regex]::Escape($Defaultprinter)) { $True } Else {$False}
  524.    $localobjTemp.Type = if ($localresult.Type -eq 'Local'){[System.Char]::ConvertFromUtf32($EmojiLocal)+$localresult.Type}Elseif($localresult.Type -eq 'Connection' -and ($localresult.ComputerName -eq 'konicaprint01p' -or $localresult.Name -match 'Canon-Secure-Print')){[System.Char]::ConvertFromUtf32($EmojiFollow)+"FollowMe"}Else{$EmojiNetwork+"Netz"}
  525.    $localobjTemp.Name = $localresult.Name
  526.    $localobjTemp.Comment = $localresult.Comment.split('\')[2]
  527.    $localobjTemp.Location = $localresult.location
  528.  
  529.    $localobjResult += $localobjTemp
  530.  }
  531.  $Collection = $Form.FindName("secondlistView")
  532.  $Collection.Foreground = 'black'
  533.  [Array]$output = $localobjResult | Select-Object -Property @{Name='Art';Expression={$_.Type}},@{Name='Name';Expression={$_.Name}}, @{Name='Beschreibung';Expression={$_.Comment}},@{Name='Druckerstandort';Expression={$_.location}},@{Name='Default';Expression={$_.Default}}| Sort-Object Druckerstandort
  534.  $Collection.ItemsSource = $output
  535.  
  536.  # Create the ListViewItem Style using XAML-based definition
  537.  $ListViewItemStyleXAML = @"
  538.     <Style TargetType="ListViewItem" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  539.       <Setter Property="Background" Value="White" />
  540.         <Style.Triggers>
  541.           <DataTrigger Binding="{Binding Default}" Value="true">
  542.             <Setter Property="Background" Value="#D0F6CA" />
  543.           </DataTrigger>
  544.         </Style.Triggers>
  545.     </Style>
  546. "@
  547.  
  548.  # Parse the XAML definition using PowerShell XML parsing
  549.  $ListViewItemStyle = [Windows.Markup.XamlReader]::Parse($ListViewItemStyleXAML)
  550.  
  551.  # Apply the created Style to the ItemContainerStyle property of the ListView
  552.  $Collection.ItemContainerStyle = $ListViewItemStyle
  553.  $Collection.Items.Refresh()
  554.  $doing.Text = $defaultprinterdeleteText
  555. }
  556.  
  557. # Add the event handler for the "addprinter" button click event
  558. $addprinter.Add_Click({
  559.    AddPrinter_Click
  560. })
  561.  
  562. $setasdefault.Add_Click({
  563.    SetDefault_Click
  564. })
  565.  
  566. $deleteprinter.Add_Click({
  567.    RemovePrinter_Click
  568. })
  569.  
  570. $Form.WindowStartupLocation = [Windows.WindowStartupLocation]::CenterScreen
  571. # Generate Title Name
  572. $Form.Title = "Druckerauswahl Ver. $Version"
  573.  
  574. $mainlist = $Form.FindName("mainListBox")
  575. $CompanyTemp = $Printers | Where-Object { $_.Company -ne $null -and $_.Company -ne '' } | Select-Object -Unique Company -ExpandProperty Company | Sort-Object
  576.  
  577. foreach ($entry in $CompanyTemp) {
  578.  $itm = new-object System.Windows.Controls.ListboxItem
  579.  $itm.Content = $entry
  580.  $itm.Foreground = 'black'
  581.  $mainlist.Items.Add($itm)
  582. }
  583.  
  584. $Form.FindName("mainListBox").Add_SelectionChanged({
  585.    $Output = $Form.FindName("mainListBox").SelectedItem.Content
  586.    $Collection = $Form.FindName("listView")
  587.    $Collection.Foreground = 'black'
  588.    [Array]$output = $Printers | Where-Object { $_.Company -eq $Output -and $_.Company -ne $null } | Select-Object -Property @{Name='Druckerstandort';Expression={$_.location}}, @{Name='Beschreibung';Expression={$_.Model}}, @{Name='Share';Expression={$_.uncname}} | Sort-Object Druckerstandort
  589.    $Collection.ItemsSource = $output
  590. })
  591.  
  592. $Collection = $Form.FindName("secondlistView")
  593. $Collection.Foreground = 'black'
  594. [Array]$output = $localobjResult | Select-Object -Property @{Name='Art';Expression={$_.Type}},@{Name='Name';Expression={$_.Name}}, @{Name='Beschreibung';Expression={$_.Comment}},@{Name='Druckerstandort';Expression={$_.location}},@{Name='Default';Expression={$_.Default}}| Sort-Object Druckerstandort
  595. $Collection.ItemsSource = $output
  596.  
  597. # Create the ListViewItem Style using XAML-based definition
  598. $ListViewItemStyleXAML = @"
  599. <Style TargetType="ListViewItem" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  600.     <Setter Property="Background" Value="White" />
  601.     <Style.Triggers>
  602.         <DataTrigger Binding="{Binding Default}" Value="true">
  603.             <Setter Property="Background" Value="#D0F6CA" />
  604.         </DataTrigger>
  605.     </Style.Triggers>
  606. </Style>
  607. "@
  608.  
  609. # Parse the XAML definition using PowerShell XML parsing
  610. $ListViewItemStyle = [Windows.Markup.XamlReader]::Parse($ListViewItemStyleXAML)
  611.  
  612. # Apply the created Style to the ItemContainerStyle property of the ListView
  613. $Collection.ItemContainerStyle = $ListViewItemStyle
  614.  
  615.  
  616.  
  617. #===========================================================================
  618. # Shows the form
  619. #===========================================================================
  620. $FormEnd = $Form.ShowDialog() #| Out-Null
Add Comment
Please, Sign In to add comment