Skip to content

Daniels Tagesmeldungen

Kleine IT-Episoden, der Diabetes & das wahre Leben

  • Startseite
  • About me

    • Lebenslauf
    • Weiterbildung
  • Diabetes melitus
    • Diabetes melitus – Definition/Typen
    • Diabetes melitus – Podcasts
    • Diabetes Typ-2 – ErlĂ€uterung
    • Medikament – Forxiga (Dapagliflozin)
    • Medikament – Eylea (Aflibercept)
    • Medikament – Lucentis (Ranibizumab )
    • Medikament – Metformin
  • Disclaimer
  • Toggle search form

Kategorie: Powershell

Powershell: Drucker entfernen mit Protokoll

Posted on 18. Juli 201617. Juli 2016 By Daniel Lensing Keine Kommentare zu Powershell: Drucker entfernen mit Protokoll

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.

Powershell

Powershell: Netzwerkport-Erreichbarkeit prĂŒfen

Posted on 29. Juni 201630. Juni 2016 By Daniel Lensing Keine Kommentare zu Powershell: Netzwerkport-Erreichbarkeit prĂŒfen

Manchmal braucht man einfach mal eine schnelle PrĂŒfung eines Ports um zum Beispiel die Funktionsweise von Applikationen oder Hardware zu testen. Entsprechend habe ich mir ein kleines Skript (Chkprt.ps1) erstellt, um diese FunktionalitĂ€t einfach abzubilden.

$ipaddress=$args[0]
$portaddress=$args[1]
 
$Port = New-Object System.Net.Sockets.TCPClient($ipaddress,$portaddress);
catch {}
if ($port -eq $Null) {
echo " Port $portadress an $ipaddress ist erreichbar ";
} else {
echo " Port $portadress an $ipaddress ist NICHT erreichbar "; 
$port = $Null }

Der Aufruf sieht fĂŒr einen Drucker dann als Beispiel dann wie folgt aus:

.\chkprt.ps1 192.168.2.3 9100
Powershell

Powershell: AD-Gruppenmitglieder exportieren

Posted on 1. MĂ€rz 201619. November 2020 By Daniel Lensing Keine Kommentare zu Powershell: AD-Gruppenmitglieder exportieren

Manchmal benötigt man zum Beispiel E-Mail-Adressen, Anschriften, Loginskripte oder weitere Attribute von Mitgliedern einer Active Directory-Gruppe. Dieses ist mit einem unkompliziertem Skript sehr schnell umgesetzt.

import-module activedirectory
$groupname = $args[0]
$Domaincontroller = "dc1.domain.local"
$parameter = 'name', 'mail', 'samaccountname'
 
$Gruppe = Get-ADGroupMember $groupname -server $Domaincontroller | Select distinguishedName
$Gruppe | ForEach { Get-ADUser $_.distinguishedName -server $Domaincontroller -Properties * | Select-object $parameter } | export-csv E:\Reports\$groupname.csv -notypeinformation -encoding UTF8

Entsprechend wird anhand des Gruppennamens eine Datei mit den Attributen aus der Variable „$parameter“ erstellt. Entsprechend können auch mehrere Gruppen als Befehlsblock abgesetzt werden.

WĂ€hrend dieses Skript eher fĂŒr Massenabfragen erstellt wurde, gibt es einen neuen Artikel mit einer Mini-GUI fĂŒr Abfragen durch IT-Verantwortliche.

Powershell

Auslesen von Subnetzen aus AD-Sites

Posted on 19. November 201527. Februar 2016 By Daniel Lensing Keine Kommentare zu Auslesen von Subnetzen aus AD-Sites

FĂŒr eine Fehleranalyse benötigte ich die eine Auflistung der konfigurierten Subnetze der definierten AD-Sites. Eine manuelle PrĂŒfung war aufgrund mehrerer definierter Sites einfach unpraktisch.

Bei meiner Recherche fand ich das folgende Skript:

$forestInformation = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
foreach($site in $forestInformation.Sites | Sort-Object -property Name) {
Write-Output $site.Name
Write-Output ("-" * ($site.Name).Length)
foreach($subnet in $site.Subnets | Sort-Object) {
Write-Output "`t$subnet"}
Write-Output ""
}

Diesen habe ich aus folgender Quelle: hier

Powershell, Windows Server 2012

NTFS-Berechtigung anhand Ordnernamen mit Namensanhang setzen

Posted on 13. Mai 201513. Dezember 2017 By Daniel Lensing 2 Kommentare zu NTFS-Berechtigung anhand Ordnernamen mit Namensanhang setzen

Einen Artikel mit Ă€hnlichem Namen habe ich bereits am Montag veröffentlicht. Darauf bekam ich eine Anfrage, dass es Applikationen gibt, welche einen Anhang an den Namen anhĂ€ngen. Dieses kann zum Beispiel ein DomĂ€nenname wie „.domain sein oder eine Versionierung wie „.V2“.

Um dieses zu lösen muss das Skript nur minimal angepasst werden

$Startordner= "Y:"
$DomÀne = "domain.local"
 
foreach($personalfolder in (get−childitem $Startordner| where {$_.psiscontainer −eq $true}))
 
{
 
$acl= Get−acl ($Startordner + $personalfolder)
 
$userlogin = $personalfolder.Name.split('.')[0]
$user = $DomÀne + "\" + $userlogin
$permission = $user,"FullControl","ContainerInherit, ObjectInherit","None","Allow"
$accessRule = New−Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
 
$acl | Set−Acl ($Startordner + $personalfolder)
 
}

Nun wird durch die Splittung und Selektierung des ersten Teils der Ordnerbezeichnung dieser als Vorlage fĂŒr den Ordnernamen verwandt.

Powershell

NTFS-Berechtigung anhand Ordnernamen setzen

Posted on 11. Mai 201511. Mai 2015 By Daniel Lensing Keine Kommentare zu NTFS-Berechtigung anhand Ordnernamen setzen

Aufgrund einer Änderung eines Speicherortes musste eine komplette Struktur von Benutzerordnern neugestaltet werden. Dazu musste die Struktur an einen anderen Speicherort verschoben werden und auch die personenbezogenen Berechtigungen komplett angepasst werden mussten.

Um diese Anforderung umzusetzen habe ich folgendes Skript verwandt:

$Startordner= "X:"
$DomÀne = "domain.local"
 
 
foreach($personalfolder in (get-childitem $Startordner| where {$_.psiscontainer -eq $true}))
{
 
$acl= Get-acl ($Startordner + $personalfolder)
 
$user = $DomÀne + "\" + $personalfolder
$permission = $user,"FullControl","ContainerInherit, ObjectInherit","None","Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
 
$acl | Set-Acl ($Startordner + $personalfolder)
 
}

Dabei werden die Ordnernamen ermittelt und diese verwandt, um ihn mit dem DomĂ€nennamen zu verknĂŒpfen. Dieser Datenstamm wird dann auf dem Ordner angewandt, um „Full Access“ inkl. der Vererbung fĂŒr den Hauptordner und allen unterliegenden Objekten.

Powershell

Powershell: Standard-AD-Ordner Computer- & User-Objekte

Posted on 9. Oktober 20148. Oktober 2014 By Daniel Lensing Keine Kommentare zu Powershell: Standard-AD-Ordner Computer- & User-Objekte

Über den Befehl „redircmp“ bzw. „redirusr“ ist es möglich die Standardzuordnung bei der Erstellung fĂŒr die Anlage von Benutzer und Computerobjekten zu verĂ€ndern.

Bei Übernahme von DomĂ€nen oder wenn man nicht mehr genau weiß, ob eine Anpassung vorgenommen wurde, kann man dieses schnell per Powershellbefehl ermitteln:

import-module activedirectory
 
Get-ADDomain | select ComputersContainer, UsersContainer | fl

Mit diesem Befehlssatz bekommt man einfach und schnell die beiden DatensÀtze angezeigt.

Powershell

Seitennummerierung der BeitrÀge

Vorherige 1 … 6 7 8 9 NĂ€chste

Daniel Lensing

Ich betreibe diesen Blog, bei dem ich meine Erfahrungen aus der IT & dem Berufsalltag sowie dem Wahnsinn des Lebens mit Höhen und Tiefen. Darunter meine „Erlebnisreise“ zum Planeten „Diabetes mellitus Typ-2“.

Translate:

Follow us

Kategorien

  • Allgemein (1)
  • Client (235)
    • Android (7)
    • Fedora (Linux) (5)
    • iOS (5)
    • Mac OS X (5)
    • Peripherie (5)
    • Ubuntu (Linux) (8)
    • Windows 10 (60)
    • Windows 11 (21)
    • Windows 7 (100)
    • Windows 8 (36)
    • Windows 8.1 (28)
    • Windows Mobile (2)
    • Windows Vista (65)
    • Windows XP (21)
  • Cloud (15)
    • Amazon AWS (1)
    • Microsoft Azure (7)
    • Office 365 (9)
  • Fortbewegung (57)
    • Auto (18)
    • Bahn (18)
    • Beinarbeit (6)
    • Flugzeug (4)
    • Zweirad (14)
  • IT-Nachrichten (37)
  • Leben Beruf und Gesundheit (204)
    • #t2dhero (53)
    • Arbeitszimmer (31)
    • Audio (20)
    • Film / Kino (7)
    • Gedanken (79)
    • Gesundheit (33)
    • Internet (5)
    • Lebensmittel & Essen (22)
    • Lesestoff (18)
    • Sport (11)
    • Veranstaltung (3)
  • Lehren & Lernen (49)
    • Forschung (1)
    • Konferenzen (3)
    • PrĂ€sentation (4)
    • Zertifizierung (42)
  • Programme (325)
    • Android-Apps (27)
    • Eigene Tools (12)
    • iOS-Apps (6)
    • Office (86)
    • Patchday+Updates (74)
    • Software (150)
    • Spiele (3)
    • Windows Phone-Apps (2)
  • Programmierung (92)
    • AutoIT (1)
    • KiXtart (1)
    • PHP (3)
    • Power Automate (1)
    • Powershell (61)
    • VB.NET (10)
    • VBA (10)
    • VBS (10)
  • Server (159)
    • Citrix XenServer (2)
    • Exchange Server (26)
    • Lync Server (1)
    • System Center (4)
    • Ubuntu Server (2)
    • Windows Home Server (2)
    • Windows Server (92)
    • Windows Server 2012 (45)
    • Windows Server 2016 (15)
    • Windows Server 2019 (18)
    • Windows Server 2022 (15)
    • Windows Server 2025 (8)
  • Telekommunikation (38)
    • Festnetz (3)
    • Internet (13)
    • Mobilfunk (23)
  • Verkauf & Verlosung (1)
  • Web-Installationen (36)
    • Joomla (4)
    • Mastodon (1)
    • MediaWiki (9)
    • phpMyAdmin (2)
    • Piwik (4)
    • Wordpress (20)
Mastodon

Copyright © 2025 Daniels Tagesmeldungen.

Powered by PressBook WordPress theme