Wenn man in Auftrag arbeitet kann es Sinn machen auch für Standardaufgaben ein Protokoll anzufertigen. Dieses macht aber manchmal mehr Aufwand als die eigentliche Aufgabe. Zu diesem Zweck habe ich mir für das Entfernen eines Druckers einen kleinen Ablauf erstellt, so dass alle Daten in eine Exportdatei geschrieben wird und anschließend die folgenden Komponenten entfernt werden:
- Druckobjekt
- Druckerport
- DHCP-Reservierung
Es werden neben den Möglichkeiten des Powershell auch WMI-Definitionen genutzt
#Abfrage Druckername $Printer = [Microsoft.VisualBasic.Interaction]::InputBox("Druckernamen eingeben:", "RemovePrinter") #Serverdefinition $DHCPServer1 ="SRVDHCP01" $Failover ="No" $Printserver1 = "SRVPRINT01" #Variable Datei $datei = "E:\RemovePrint\$Printer.txt" "Protokoll Drucker $Printer " | set-content $datei -Force "----------------------------------------------------------------------" | Add-Content $datei Write-host "1/3 Inventarisierung wird durchgeführt" #Variablenabfrage Druckerobjekt $Printquery = get-printer $Printer -computername $Printserver1 | Select-Object * $Portname = $Printquery.PortName $Sharename =$Printquery.ShareName $Sharestatus = $Printquery.Shared $ADPublished = $Printquery.Published $Kommentar = $Printquery.Comment $Standort = $Printquery.Location $Treiber = $Printquery.DriverName $Druckauftraege =$Printquery.JobCount $Druckstatus = $Printquery.PrinterStatus #Variablenabfrage Druckerport $Printport = get-wmiobject -class Win32_TCPIPPrinterPort -Computername $Printserver1 -Namespace "root\CIMV2" -filter "Name='$Portname'" $Printprotokoll = $Printport.Protocol $PrintIP = $Printport.HostAddress $PrintPort = $Printport.PortNumber $PrintQueue =$Printport.Queue $SNMPEnable = $Printport.SNMPEnabled $SNMPName = $Printport.SNMPCommunity $SNMPID = $Printport.SNMPDevIndex #Bericht - aktueller Status "" | Add-Content $datei "Druckerstatus: $Druckstatus" |add-content $datei "" | Add-Content $datei "Kommentar: $Kommentar" |add-content $datei "Standort: $Standort" |add-content $datei "" | Add-Content $datei "Freigabe: $Sharename" |add-content $datei "Freigabestatus: $Sharestatus" |add-content $datei "AD-Veröffentlichung: $ADPublished" |add-content $datei "" | Add-Content $datei "Treibername: $Treiber" |add-content $datei "" | Add-Content $datei "Anzahl Aufträge: $Druckauftraege" |add-content $datei If ($Druckauftraege -gt 0) { $Druckliste=get-printer $printer -computername $Printserver1 | Get-PrintJob | Select-Object ID,documentname,Username,jobstatus $Druckliste |add-content $datei } "" | Add-Content $datei "Portbezeichnung: $Portname" |add-content $datei If ($Printprotokoll -like "1"){ "Protokoll: RAW" | add-content $datei "IP-Adresse: $PrintIP" | add-content $datei "Port: $PrintPort" | add-content $datei "" | Add-Content $datei $PortProtokoll ="RAW"} If ($Printprotokoll -like "2"){ "Protokoll: LPR" | add-content $datei "Queue: $PrintQueue" | add-content $datei "Port: $PrintPort" | add-content $datei "" | Add-Content $datei $PortProtokoll ="LPR"} "SNMP-Status: $snmpenable" | add-content $datei IF ($SNMPEnable -like "True") { "SNMP-Community: $SNMPName" | add-content $datei "SNMP-Index: $SNMPIndex" | add-content $datei} "" | Add-Content $datei #Variablenabfrage DHCP $DHCPSet = Get-dhcpServerv4Lease -IPaddress $PrintIP -computername $DHCPServer1 | Select-Object * $DHCPMAC =$dhcpset.ClientId $DHCPScope = $DHCPSet.ScopeId $DhcpState = $DHCPSet.AddressState $DHCPClientType = $Dhcpset.ClientType $DhcpDescription = $DHCPset.Description $DHCPHost = $DHCPSet.HostName "MAC-Adresse: $DHCPMac"| add-content $Datei "Beschreibung: $DhcpDescription" | add-content $datei "HostName: $Dhcphost" | add-content $datei "" | Add-Content $datei "Adressstatus: $DHCPState" | add-content $datei "DHCP-Typ: $DHCPClienttype" | add-content $datei "DHCP-Scope: $DHCPScope" | add-content $Datei "----------------------------------------------------------------------" | Add-Content $datei "Tasks:" | Add-Content $datei "" | Add-Content $datei Write-host "2/3 Druckerlöschung wird bearbeitet" #Drucker offline setzen $printer = Get-WMIObject -Class win32_printer -Computername $Printserver1 -Namespace "root\CIMV2" | ? { $_.name -like $Printer } $printer.WorkOffline = $true $printer.Put() #AD-Veröffentlichung deaktivieren If ($ADPublished -like 'True') {Set-Printer $Printer -computername $Printserver1 -Published $False} #Share-Freigabe entfernen If ($Sharestatus -like 'True') {Set-Printer $Printer -computername $Printserver1 -Shared $False} #Druckaufträge löschen If ($Druckauftraege -gt 0) {Get-PrintJob -PrinterName $Printer -ComputerName $Printserver1 | Remove-Printjob -CimSession $Printserver1} #Drucker entfernen Remove-Printer -Name $Printer -Computername $Printserver1 Write-host "3/3 Portlöschung wird bearbeitet" $Portcount = get-wmiobject -class Win32_Printer -Computername $Printserver1 -Namespace "root\CIMV2" -filter "PortName='$Portname'" | measure If ($Portcount.Count -lt "1") { Remove-PrinterPort -name $Portname -ComputerName $Printserver1 $DHCPRemove = "Yes"} If ($dhcpremove = "Yes"){ Remove-DhcpServerv4Reservation -ComputerName $DHCPServer1 -IPAddress $PrintIP} If ($Failover = "Yes") { Invoke-DhcpServerv4FailoverReplication -ComputerName $DHCPServer1 -ScopeId $DHCPScope} Write-host "---- Skriptende ----"
Man könnte auch das Protokoll per Mail versenden lassen oder weitere Server einführen, um zum Beispiel eine Failover-Möglichkeit zu schaffen.