Visualizzazione post con etichetta Server di stampa. Mostra tutti i post
Visualizzazione post con etichetta Server di stampa. Mostra tutti i post

martedì 29 marzo 2022

PowerShell: Aggiornare il server di stampa delle stampanti di rete configurate sul PC

A seguito sostituzione del server di stampa o alla modifica del suo nome, è necessario aggiornare la configurazione delle stampanti di rete installate su tutti i PC. L'operazione può essere eseguita tramite il seguente script.
 # Specificare il vecchio server di stampa  
 $strOLDPrintServer = "Vecchio_Server_Stampa"  
 # Specificare il nuovo server di stampa  
 $strNewPrintServer = "Nuovo_Server_Stampa"  
    
 # Verifica se lo script è già stato eseguito andando a verificare la presenza di un file  
 If (-not (Test-Path ".\$env:USERNAME-printers.txt")) {  
   Write-Host "Avvio Update dei server di stampa ..."  
      Write-Host "Stampanti di rete"  
    
   # L'operazione viene eseguita solo sulle stampanti di rete che hanno il vecchio server di stampa specificato  
     Get-WMIObject Win32_Printer | where{$_.network -eq "true" -and $_.SystemName -like "\\" + $strOLDPrintServer} | Select ShareName, Default, Name, SystemName | ForEach {  
    
                # Visualizza il nome della stampante di rete trovata ($_.ShareName) e se si tratta di stampante predefinita ($_.Default) e il server di stampa ($_.SystemName)  
                Write-Host "Nome: " $_.ShareName " Predefinita: " $_.Default " PrinterServer: " $_.SystemName  
   
                # rimuove la vecchia stampante  
                (New-Object -ComObject WScript.Network).RemovePrinterConnection($_.Name)  
                   
                # Aggiunge la nuova stampante utilizzando il nuovo server di stampa $strNewPrintServer   
                # e il nome $_.ShareName   
                $printer = [WMIClass]"\\.\root\cimv2:Win32_Printer"  
                $printer.AddPrinterConnection("\\" + $strNewPrintServer + "\" + $_.Sharename)  
                   
                # Se la vecchia stampante era predefinita allora imposta predefinita anche quella nuova  
                if($_.Default -eq $true) {  
                     $printer = Get-WmiObject Win32_Printer | ? { $_.name -like "\\" + $strNewPrintServer +"\" + $_.Sharename }  
                     $printer.SetDefaultPrinter()  
                }  
        
   }  
 }  
   
 # Crea un file di testo. La presenza del file indicherà che lo script è già stato eseguito.  
 Write-Host "Fine" | Out-File ".\$env:USERNAME-printers.txt"  

Lo script è molto semplice e i commenti aiutano la comprensione del suo funzionamento. All'interno del codice vanno specificati i nomi del vecchio e del nuovo server di stampa rispettivamente nelle variabili $strOLDPrintServer$strNewPrintServer. Lo script analizza tutte le stampanti configurate sul computer prendendo in considerazione solo le stampanti di rete che fanno riferimento al vecchio server di stampa. Tali stampanti verranno eliminate e riconfigurate utilizzando il nome del nuovo server di stampa. Nel caso di stampanti predefinite l'impostazione verrà ripristinata. Per evitare che lo script possa essere eseguito più volte, all'interno della cartella contenente il file PS1 verrà creato un file di testo. La presenza di tale file indicherà allo script che è già stato eseguito sulla postazione e non verrà eseguita alcuna ulteriore operazione.
Aggiornamento stampanti con il nuovo server di stampa
FIG 1 - Aggiornamento stampanti con il nuovo server di stampa


Dal seguente link è possibile scaricare il file PS1