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.