Powershell Basics für den Anwender im Heimbereich

Powershell Grundbefehle

In dieser kleinen Auflistung befinden sich so die Klassiker die man kennen sollte. Gerade im Heimbereich.

Computer Herunterfahren
Stop-Computer
(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).Win32Shutdown(1)

Computer Neustart
Restart-Computer –Force
(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).Win32Shutdown(2)

Abmelden
(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).Win32Shutdown(0)

Laufwerke anzeigen
Get-PSDrive

Laufwerk für Ordner erstellen
New-PSDrive -name TMP -PSProvider FileSystem -root C:\Temp

Laufwerk entfernen
Remove-PSDRive TMP

Den Registry Pfad öffnen
cd HKLM:\Software
Set-Location HKCU:\Software\Microsoft\Windows

Registry Einträge anzeigen
Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\
Get-ItemProperty “HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Excel.exe”

Wann wurde der Computer gestartet und wie lange läuft er
$Computer = “VMWIN732”
$Info = Get-WmiObject -Class Win32_OperatingSystem -Computername $Computer
$Start = $Info.ConvertToDateTime($Info.LastBootUpTime)
Write-Host “Einschaltzeit: “$Start.ToString()

$Time = (Get-Date) – $Start
Write-Host “Laufzeit:” $Time.Days “Tage,” $Time.Hours “Stunden,” $Time.Minutes “Minuten,”  `
$Time.Seconds “Sekunden”

Wie ist der Computername
$(Get-WmiObject Win32_Computersystem).name
$SystemName = (New-Object -ComObject WScript.Network).computername

Computer Details ermitteln
gwmi win32_ComputerSystem

OS ermitteln
(Get-WmiObject Win32_OperatingSystem).Caption

BIOS ermitteln
Get-wmiobject win32_bios

Festplatten ermitteln
Get-WmiObject -Class Win32_DiskDrive

Festplatten Details
gwmi win32_logicaldisk
Get-WmiObject Win32_LogicalDisk | Format-List *

Festplatten Belegung
gwmi win32_logicaldisk -filter “drivetype = 3”

Treiber Informationen
Get-WmiObject Win32_SystemDriver

Freigaben auflisten
Get-WmiObject Win32_Share

Prozesse anzeigen
Get-Process
Get-Process | sort-object -property WS -Descending | select-object -First 15

Ping
Test-Connection -Computername $Computer
Test-Connection -count 1 -Computername $Computer

Anzeige aller Dateien
Get-ChildItem -Recurse –Force

Dateien verschieben
Move-Item -Path C:\Temp\Test.txt -destination E:\Temp\Test.txt

Registry Schlüssel verschieben
Move-Item HKLM:\Software\MeineSoftware\* HKLM:\Software\DeineSoftware

Datei umbenennen
Rename-Item -Path C:\Temp\MeineDatei.txt -Newname DeineDatei.txt

Punktzeichen aus Dateinamen entfernen
Get-ChildItem *.* | foreach {Rename-Item $_ -NewName $($_.name -replace ‘\.’, $null)}

Ermitteln der 10 größten PDF Dateien
Get-Childitem -recurse -include *.pdf | Sort-Object length -descending | Select-Object -first 10

NTFS Rechte auf einen anderen Ordner übertragen
$ACL = Get-Acl “C:\Temp”
Set-Acl “D:\Temp” $acl

Suche nach dem Wort Rolle in allen .txt Dokumenten
Select-String “D:\DATA\DESKTOP\__Loses_Zeug\*.txt” -pattern “Rolle”
Get-ChildItem *.* -exclude *.pdf -recurse | Select-String -Pattern “Rolle”

Kopiere die ersten 30 Zeilen in eine neue Datei
Get-Content MeineDatei.txt -totalcount 30 | Set-Content DeineDatei.txt

Alle .txt Dateien im aktuellen Ordner komprimieren
Compress-Archive -Path *.txt -DestinationPath Texdateien.zip

RemoteDesktop Dienst installieren
Add-WindowsFeature Remote-Desktop-Services

Ein Dienst auf den Starttyp „Automatisch“ setzen
Set-Service Netlogon -startuptype automatic

Einen Dienst starten
Start-Service Netlogon

Remoteverwaltung aktivieren
Enable-PSRemoting –force

Computer zur Domäne hinzufügen
Add-Computer -DomainName “ndsedv.de” –Restart

Details eines Benutzers ermitteln
Get-ADUser -Identity Joern.Walter -Properties *


Powershell – Exchange Server 2019 Befehle

Exchange Server 2019 Powershell-Befehle

Postfach-Funktionsrolle installieren

Install-WindowsFeature NET-Framework-45-Features, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInterface, RSAT-Clustering-Mgmt, RSAT-Clustering-PowerShell, Web-Mgmt-Console, WAS-Process-Model, Web-Asp-Net45, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console, Web-Metabase, Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI, Windows-Identity-Foundation, RSAT-ADDS

Installation der Windows Server 2019 Feature für Edge-Funktionsrolle

Install-WindowsFeature ADLDS

Active Directory Schema Version abfragen

DSQUERY.exe * “CN=ms-Exch-Schema-Version-Pt,CN=schema,CN=configuration,DC=ndsedv,DC=de” -Scope base -Attr rangeUpper

Import eines exportierten Zertifikates aus einer PFX-Datei

$pwd = ConvertTo-SecureString -String ‘MyPa$$w0rd’ -AsPlainText -Force
Import-ExchangeCertificate -FileName ‘\\EX16\Temp\Certificate.pfx’ -Password $pwd -PrivateKeyExportable:$true -FriendlyName ‘Exchange Prod Cert’ -Server EX16

Abfrage der Zertifikate des lokalen Exchange Servers EX16

Get-ExchangeCertificate -Server EX16

Zertifikat durch Angabe des Fingerabdrucks für die Dienste IMAP4, POP3, WEB und SMTP binden

Enable-ExchangeCertificate -Thumbprint THUMBPRINT -Services IMAP,POP,IIS,SMTP

Exchange Server Lizenzschlüssel installieren

Set-ExchangeServer -Identity EX16 -ProductKey 11111-22222-33333-44444-55555

Erstellung einer neuen Edge-Abonnementdatei auf einem Edge-Servers

New-EdgeSubscription -FileName C:\Temp\Edgesync.XML

Import einer Edge-Abonnementdatei auf einem Exchange Server mit Postfach-Funktionsrolle mit Erstellung eines Internet-Sendekonnektors

New-EdgeSubscription -FileData ([byte[]]$(Get-Content -Path ‘C:\Temp\EdgeServerSubscription.XML’ -Encoding Byte -ReadCount 0)) -Site ‘Default-First-Site-Name’

Importieren einer Edge-Abonnementdatei auf einem Exchange Server mit Postfach-Funktionsrolle ohne Erstellung eines Internet-Sendekonnektors

New-EdgeSubscription -FileData ([byte[]]$(Get-Content -Path ‘C:\Temp\EdgeServerSubscription.XML’ -Encoding Byte -ReadCount 0)) -Site ‘Default-First-Site-Name’ -CreateInternetSendConnector:$false

Hinzufügen einer neuen UPN-Domäne im Active Directory Forest

Get-ADForest | Set-ADForest -UPNSuffixes @{add=”ndsedv.de”}

Abfrage aller Benutzer mit einem .local-UPN-Suffix

$Users = Get-ADUser -Filter {UserPrincipalName -like ‘*.local’} -Properties userPrincipalName -ResultSetSize $null

Alln Benutzer-Objekten das neue UPN-Suffix setzen

$Users | foreach {$upn = $_.UserPrincipalName.Replace(“nds.local”,”ndsedv.de”); $_ | Set-ADUser -UserPrincipalName $upn}

Konfiguration der URL-Einstellungen für zwei Exchange Server

.\ConfigureExchangeURLs.ps1 -Server SRVEX16,SRVEX17 -InternalURL mail.ndsedv.de -ExternalURL mail.ndsedv.de -AutodiscoverSCP autodiscover.ndsedv.de

Erstellung eines neuen Internet-Sendekonnektors

New-SendConnector -Name ‘Email-Internet’ -AddressSpaces * -Internet -SourceTransportServers SRVEX16

Setzen des FQDN-Parameter für dem Internet-Sendekonnektors

Set-SendConnector -Identity ‘Email-Internet’ -Fqdn smtp.ndsedv.de

Abfrage der Parameter für den Standard-Empfangskonnektor eines Exchange Servers mit Postfach-Funktionsrolle

Get-ReceiveConnector ‘SRVEX16\Default Frontend SRVEX16’ | FL Name,FQDN,Banner

Konfiguration der Office Online Server-URL je Exchange Server

Set-MailboxServer SRVEX16 -WacDiscoveryEndpoint ‘https://oos.int.ndsedv.de/hosting/discovery’

Konfiguration der Office Online Server-URL auf Organisationsebene

Set-OrganizationConfig -WacDiscoveryEndpoint ‘https://oos.int.ndsedv.de/hosting/discovery’

Abfrage der Skype for Business (SfB)-Konfiguration

Get-CsOAuthConfiguration

Setzen der Exchange Server AutoDiscover URL für SfB

Set-CsOAuthConfiguration -Identity global -ExchangeAutodiscoverUrl “https://autodiscover.ndsedv.de/autodiscover/autodiscover.svc”
New-CsPartnerApplication -Identity Exchange -ApplicationTrustLevel Full -MetadataUrl https://[AUTODISCOVER-FQDN]/autodiscover/metadata/json/1

Einrichtung von Skype for Business als Partner-Applikation

cd $exscripts
Configure-EnterprisePartnerApplication.ps1 -AuthMetadataUrl “https://[POOL-FQDN]/metadata/json/1” -ApplicationType Lync

Aktualisierung der Exchange-Topologie-Informationen auf dem lokalen Exchange Server

Get-ExchangeDiagnosticInfo -Server $ENV:COMPUTERNAME -Process Microsoft.Exchange.Directory.TopologyService -Component VariantConfiguration -Argument Refresh

Konfiguration der OWA-Verzeichnisse auf allen Exchange Servern

Get-OwaVirtualDirectory | Set-OwaVirtualDirectory -InstantMessagingEnabled $True -InstantMessagingType OCS

Neustart des OWA-Applikationspools auf allen Exchange Servern

Get-ExchangeServer | % {Invoke-Command -ComputerName $_.Name -ScriptBlock {Restart-WebAppPool MSExchangeOWAApppool} }

Neustart des OWA-Applikationspools auf allen Exchange 2019 Servern

Get-ExchangeServer | ? { $_.AdminDisplayVersion -like ‘*15.2.*’} | % {Invoke-Command -ComputerName $_.Name -ScriptBlock {Restart-WebAppPool MSExchangeOWAApppool} }

Konfiguration der Standard OWA-Postfachrichtlinie für Skype for Business

Set-OwaMailboxPolicy -Identity “Default” -InstantMessagingEnabled $True -InstantMessagingType “OCS”

Abfrage der vorhandenen RBAC-Rollegruppen

Get-RoleGroup | Sort-Object Name | FT Name,RoleAssignments -AutoSize

Auflistung der Mitglieder einer RBAC-Rollengruppe

Get-RoleGroup “Organization Management” | Get-RoleGroupMember

Abfrage des ECP-virtuellen Verzeichnisses für alle Exchange Server in der Exchange-Organisation

Set-ADServerSettings -ViewEntireForest:$true
Get-EcpVirtualDirectory | Sort-Object Server | Format-Table Server,Name,InternalUrl,ExternalUrl -AutoSize

Abfrage des OWA-virtuellen Verzeichnisses für alle Exchange Server in der Exchange-Organisation

Get-OwaVirtualDirectory | Sort-Object Server | Format-Table Server,Name,InternalUrl,ExternalUrl -AutoSize

Erstellung einer neuen Client Access Rule

New-ClientAccessRule -Name ‘Block External ECP Access’ -Action AllowAccess -AnyOfProtocols ExchangeAdminCenter -ExceptAnyOfClientIPAddressesOrRanges 10.100.10/24 -Priority 1

Aufbau einer Remote-PowerShell Session zu einem Exchange Server Endpunkt in der lokalen IT-Infrastruktur

$UserCredential = Get-Credential
$ServerFQDN = ‘SRVEX16.ndsedv.de’
$ConnectionString = “http://$($ServerFQDN)/PowerShell/”

Erstellung einer neuen PowerShell-Session

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $ConnectionString -Authentication Kerberos -Credential $UserCredential
Import-PSSession -Session $Session
Remove-PSSession $Session

Prüfung der Anti-Malware-Server-Konfiguration eines Exchange Servers

Get-MalwareFilteringServer SRVEX16 | fl

Deaktivierung des ActiveSync-Protokolls für alle Benutzer

Set-CASMailbox -ActiveSyncEnabled $false

Aktivierung der Quarantäne

Set-ActiveSyncOrganizationSettings -DefaultAccessLevel Quarantine

Blocken mobiler Active-Sync-Endgeräte

Set-ActiveSyncOrganizationSettings -DefaultAccessLevel Block

Neue Standardrichtlinie für mobile Endgeräte

New-MobileDeviceMailboxPolicy -Name “NDSEDV Default” -IsDefault $true -AllowUnsignedApplications $false -AllowInternetSharing $False -AllowCamera $false -AllowBluetooth HandsFreeOnly

Neue Richtlinie für Mitarbeiter der Abteilung Sales

New-MobileDeviceMailboxPolicy -Name “NDSEDV Sales” -RequireDeviceEncryption $true

Zuweisung der neuen Richtlinie für alle Postfacher in der Organisationseinheit Sales

Get-Mailbox -OrganizationalUnit “OU=Sales,OU=DE,Standort,DC=ndsedv,DC=de” | Set-CASMailbox -ActiveSyncMailboxPolicy “NDSEDV Sales”

Deaktivieren der Offline-Funktion für Outlook on the Web in einer Richtlinie

Set-OwaMailboxPolicy “NDSEDV OWA Policy” -AllowOfflineOn NoComputers

Erstellung einer neuen OWA-Postfach-Richtlinie

New-OwaMailboxPolicy -Name “NDSEDV Sales”

Konfiguration der OWA-Richtlinie für Sales

Set-OWAMailboxPolicy “NDSEDV Sales” -AllowOfflineOn NoComputers

Zuweisung der neuen OWA-Richtlinie an alle Postfächer der OU Sales

Get-Mailbox -OrganizationalUnit “OU=Sales,OU=DE,OU=Standort,DC=ndsedv,DC=de” | Set-CASMailbox -OwaMailboxPolicy “Varuna Sales”

Abfrage aller Aufbewahrungsrichtlinien

Get-RetentionPolicy

Löschung der Richtlinientag-Verlinkungen

Set-RetentionPolicy “Default MRM Policy” -RetentionPolicyTagLinks $null

Erstellung des Richtlinientags NDSEDV-Default

New-RetentionPolicyTag “NDSEDV-Default” -Type All -RetentionEnabled $true -AgeLimitForRetention 730 -RetentionAction PermanentlyDelete

Erstellung des Richtlinientags NDSEDV-Default-Sales

New-RetentionPolicyTag “NDSEDV-Default-Sales” -Type All -RetentionEnabled $true -AgeLimitForRetention 365 -RetentionAction PermanentlyDelete

Erstellung des Richtlinientags NDSEDV-DeletedItems

New-RetentionPolicyTag “NDSEDV-DeletedItems” -Type DeletedItems -RetentionEnabled $true -AgeLimitForRetention 30 -RetentionAction DeleteAndAllowRecovery

Erstellung des Richtlinientags NDSEDV-Conversation

New-RetentionPolicyTag “NDSEDV-Conversation” -Type ConversationHistory -RetentionEnabled $true -AgeLimitForRetention 60 -RetentionAction DeleteAndAllowRecovery

Erstellung des Richtlinientags NDSEDV-NeverDelete

New-RetentionPolicyTag “NDSEDV-NeverDelete” -Type Personal -RetentionEnabled $false -RetentionAction DeleteAndAllowRecovery

Neue Retention-Policy NDSEDVDefault

New-RetentionPolicy -Name “NDSEDVDefault” -RetentionPolicyTagLinks “NDSEDV-Default”,”NDSEDV-DeletedItems”, “NDSEDV-NeverDelete”

Neue Retention-Policy NDSEDVSales

New-RetentionPolicy -Name “NDSEDVSales” -RetentionPolicyTagLinks “NDSEDV-Default-Sales”, “NDSEDV-DeletedItems”,”NDSEDV-Conversation”

Zuweisung der Aufbewahrungsrichtlinie an Anwender in der OU Sales

Get-Mailbox -OrganizationalUnit “OU=Sales,OU=DE,OU=Standort,DC=ndsedv,DC=de” | Set-Mailbox -RetentionPolicy NDSEDVSales

Zuweisung der Aufbewahrungsrichtlinie an alle Benutzerpostfächer, denen nicht die NDSEDVSales-Richtlinie zugewiesen wurde

Set-ADServerSettings -ViewEntireForest $true
Get-Mailbox -ResultSize Unlimited | ?{($_.RecipientTypeDetials -eq “UserMailbox”) -and ($_.RetentionPolicy -ne “NDSEDVSales”)} | Set-Mailbox -RetentionPolicy NDSEDVSales

Aktivierung von Litigation Hold für ein Postfach ohne Zeitbegrenzung

Set-Mailbox -Identity JoernWalter -LitigationHoldEnabled $true

Aktivierung von Litigation Hold für ein Postfach, Laufzeit 2 Jahre

Set-Mailbox -Identity JoernWalter -LitigationHoldEnabled $true -LitigationHoldDuration 730

Aktivierung des Journalings für eine Postfachdatenbank

Set-MailboxDatabase -Identity DB01 -JournalRecipient journal@ndsedv.de

Import einer DLP-Richtlinienvorlage aus einem lokalen Verzeichnis

Import-DlpPolicyTemplate -FileData ([Byte[]]$(Get-Content -Path “C:\Temp\Custom-DLP-Policy.xml” -Encoding Byte -ReadCount 0))

Deaktivierung der Admin-Audit-Protokollierung

Set-AdminAuditLogConfig -AdminAuditLogEnabled $false

Abfrage der RecoverableItems-Ordnergrößen in einem Postfach

Get-Mailbox JoernWalter | Get-mailboxFolderStatistics -FolderScope RecoverableItems | FT Name,FolderSize -AutoSize

Aktivieren des Postfach-Audit-Protokolls für einen einzelnen Anwender

Set-Mailbox -Identity JoernWalter -AuditEnabled $true

Aktivieren des Postfach-Audit-Protokolls für alle geteilten Postfächer

Get-Mailbox -ResultSize Unlimited -Filter {RecipientTypeDetails -eq “SharedMailbox”} | Select PrimarySmtpAddress | ForEach {Set-Mailbox -Identity $_.PrimarySmtpAddress -AuditEnabled $true}

Aktivieren des Postfach-Audit-Protokolls für einen einzelnen Anwender

Set-Mailbox -Identity JoernWalter -AuditEnabled $false

Aktivieren des Postfach-Audit-Protokolls für Administratorzugriffe auf das Postfach eines einzelnen Anwenders

Set-Mailbox -Identity John.Doe@varunagroup.de -AuditAdmin MessageBind,FolderBind -AuditEnabled $true

Synchrone Suche im Postfach-Audit-Protokoll für Admin- und Stellvertreterzugriffe zwischen dem 01.01. und 30.04.2019

Search-MailboxAuditLog -Identity JoernWalter -LogonTypes Admin,Delegate -StartDate 1/1/2019 -EndDate 4/30/2019 -ResultSize 2000

Erstellung einer neuen OWA-Richtlinie

New-OwaMailboxPolicy -Name Audit-OWA-Policy

Prüfen, ob XML-Dateien in der OWA-Richtlinie blockiert werden

Get-OwaMailboxPolicy -Identity Audit-OWA-Policy | Select-Object -ExpandProperty AllowedFileTypes

Hinzufügen von XML als erlaubtem Dateityp in OWA-Richtlinie

Set-OwaMailboxPolicy -Identity Audit-OWA-Policy -AllowedFileTypes @{add=’.xml’}

Aktivierung des Audit-Protokoll-Bypasses für das Dienstkonto Monitoring

Set-MailboxAuditBypassAssociation -Identity “Monitoring” -AuditBypassEnabled $true

Deaktivierung des Audit-Protokoll-Bypasses für das Dienstkonto Monitoring

Set-MailboxAuditBypassAssociation -Identity “Monitoring” -AuditBypassEnabled $false

Ausgabe aller Postfach-Audit-Protokoll-Zuordnungen

Get-MailboxAuditBypassAssociation -ResultSize unlimited

https://www.rheinwerk-verlag.de/

 


Datendeduplizierung mit der Powershell einrichten

Deduplizierung einrichten

Zu diesem Thema hatte ich bereits etwas geschrieben. Um eine Anfrage zu beantworten, zeige ich kurz wie sich die Datendeduplizierung mit der Powershell einrichten lässt.

Install-WindowsFeature -Name FS-Data-Deduplication -IncludeAllSubFeature

Install Windows Feature FS-Data-Deduplication

Get-ScheduledTask -TaskPath \Microsoft\Windows\Deduplication\

Install Windows Feature FS-Data-Deduplication

Enable-DedupVolume -Volume E: -UsageType Default

Enable-DedupVolume Default

Set-DedupVolume -Volume “E:” OptimizeInUseFiles -NoCompress $false -NoCompressionFileType “.zip”,”.rar” -MinimumFileAgeDays 0 -MinimumFileSize 50000 -ExcludeFolder “E:\Temp” -ExcludeFileType “.png”

Set DedupVolume Parameter

Start-DedupJob -Volume “E:” -Type Garbagecollections -Memory 50 -Cores 2 -Priority High -Full

Start-Dedup Optimization

Get-DedupStatus | format-list

Server 2016 Daten Deduplizierung

Auf dieser Seite werden alle Parameter gut beschrieben, so das ich nichts mehr dazu schreiben muss.

https://docs.microsoft.com/de-de/windows-server/storage/data-deduplication/advanced-settings

 


Speicherplatz von Festplatten überwachen Event-Log

Write-EventLog Free Disk Space

In diesem Dokument geht es um die Überwachung des freien Speicherplatzes.

Sobald der freie Speicherplatz unter Wert „X” sinkt, wird eine Information ins Ereignisprotokoll geschrieben.

Sinkt der freie Speicherplatz unter Wert „Y”, wird eine Warnung ins Ereignisprotokoll geschrieben.

Speicherplatz von Festplatten überwachen


Download und Installation von Microsoft Visual C++ Redistributable

Powershell Install Microsoft Visual C++ Redistributable

Mit diesem Powershell Skript könnt ihr die aktuellen Installationspakete herunterladen und installieren.

Powershell Download Microsoft Visual C++ Redistributable

Powershell Install Microsoft Visual C++ Redistributable

Programme und Features

Powershell Install all VS

Solche Fehlerbilder gehören dann der Vergangenheit an 😉

MSVCR110.dll fehlt


Reboot von Server oder Workstations einer OU

Reboot Workstation or Server from OU

# Export all Maschines

(Get-ADComputer -Filter * -SearchBase “OU=Server,OU=Machines,OU=ORG,DC=ndsedv,DC=de”).Name | Out-File c:\Temp\Servers.txt

# Export only Workstations

(Get-ADComputer -Filter ‘operatingsystem -notlike “*server*”‘).Name | Out-File C:\Temp\Workstations.txt

# Export only Server

(Get-ADComputer -Filter ‘operatingsystem -like “*server*”‘).Name | Out-File C:\Temp\Servers.txt

# Reboot

Restart-Computer -ComputerName (Get-Content C:\Temp\computers.txt) -Force -ErrorAction SilentlyContinue -ErrorVariable NoRestart

$NoRestart.targetobject | Out-File C:\Temp\NoReboot.txt

https://www.der-windows-papst.de/category/skripte/