Beiträge mit Tag ‘powershell’

Apps flott unter Windows 10/11 installieren

Mit Windows 10/11 kam auch ein Paketmanager, wie man es unter Linux gewohnt ist dazu. Über diesen Paketmanager „WinGet“ kann man mittels Powershell einfach Programme nach installieren. Gerade wenn man viele Rechner installieren möchte ist dies eine sehr einfache Möglichkeit (sofern man kein SCCM zur Hand hat). Ein weiterer Vorteil gegenüber einer manuellen Installation ist, dass man die Apps sehr einfach aktualisieren kann. (winget upgrade –all)

Installiert wird WinGet über der Microsoft Appstore. Dazu einfach winget in die Suchzeile eingeben und installieren.

Anschließend kann man in der Powershell (oder Command-Box) den Befehl WinGet ausführen. Ohne Parameter wird einem eine Liste möglicher Befehle ausgegeben. WinGet List zeigt z.B. alle installierten Apps an.

Hier meine Apps, die ich eigentlich auf jeden Rechner drauf mache und für notwendig erachte:

winget install 7zip.7zip --accept-package-agreements --silent --accept-source-agreements 
winget install Irfanview -s msstore --accept-package-agreements --silent  
winget install Ghisler.TotalCommander --accept-package-agreements  
winget install Mozilla.Firefox --accept-package-agreements  
winget install Google.Chrome --accept-package-agreements  
winget install "Adobe Acrobat Reader DC" -s msstore --accept-package-agreements  
winget install vlc -s msstore --accept-package-agreements
winget install Notepad++.Notepad++ --accept-package-agreements  
winget install Zoom.Zoom --accept-package-agreements

Zusätzlich vielleicht noch folgende Apps:

winget install TeamViewer.TeamViewer --accept-package-agreements
winget install TeamViewer.TeamViewer.Host --accept-package-agreements
winget install Putty.Putty --accept-package-agreements
winget install TimKosse.FileZilla.Client --accept-package-agreements
winget install WinSCP.WinSCP --accept-package-agreements
winget install sysinternals --accept-package-agreements

Möchte man eine bestimmte Software installieren, dann kann man den Parameter search (also winget search AppName ) bemühen.

Exchange PowerShell Snippets

Hier möchte ich von mir häufig benutzte Exchange PowerShell Befehle notieren.

Weiterleitungen ermitteln

Get-Mailbox -ResultSize unlimited | Where-Object {$_.ForwardingSMTPAddress -ne $null} | Select-Object Name,ForwardingSMTPAddress

Verteilergruppen ermitteln und abspeichern

write-output “” > C:\temp\outputDGmembers.txt
get-distributiongroup | Sort -Property DisplayName | foreach {
$name = $_.displayname
$mailadresse = $_.PrimarySmtpAddress
$output = ‘Group Name: ‘ + $Name + ' ' + $mailadresse
write-output $output >> C:\temp\outputDGmembers.txt
Get-DistributionGroupMember $name | Sort -Property DisplayName | Select DisplayName, Alias, Department >> C:\temp\outputDGmembers.txt
write-output “” “” >> C:\temp\outputDGmembers.txt
}

Senden-Als Berechtigungen ermitteln (kann länger dauern)

Get-Mailbox | Get-ADPermission | where {($_.ExtendedRights -like '*Send*') -and -not ($_.User -like "NT-AUTORITÄT\SELBST")}  | Format-Table -Auto Identity,User,Deny,ExtendedRights

Senden im Auftrag ermitteln (kann länger dauern)

Get-Mailbox | Where-Object {$_.GrantSendOnBehalfTo -ne $null} | fl DisplayName,Alias,Identity,GrantSendOnBehalfTo

Vollzugriff auf Postfach ermitteln (alle)

$nbdomain = "NetBIOS-DOMAIN"
Get-Mailbox | Get-mailboxPermission | Where-Object { ($_.accessRights -like "*fullaccess*") -and -not ($_.User -like "nt-autorität\selbst") -and -not ($_.User -like "$nbdomain\Domänen-Admins")-and -not ($_.User -like "$nbdomain\Organisations-Admins") -and -not ($_.User -like "$nbdomain\Organization Management") -and -not ($_.User -like "$nbdomain\Administrator") -and -not ($_.User -like "$nbdomain\Exchange Servers") -and -not ($_.User -like "$nbdomain\Exchange Trusted Subsystem") -and -not ($_.User -like "nt-autorität\system")} | ft -AutoSize

Berechtigung eines einzelnen Postfachs auslesen

$user = "k.mustermann"
get-mailbox -identity $user| Get-MailboxPermission | ?{($_.IsInherited -eq $False) -and -not ($_.User -match "SELBST")} | ft $user,User,AccessRights -AutoSize

Mailbox Exportieren vorbereiten. Dieser Nutzer hat nach dem Neustart der Powershell das Recht Postfächer zu ex- bzw. importieren.

New-ManagementRoleAssignment -Role "Mailbox Import Export" -User <BENUTZERAME>

Postfach exportieren

New-MailboxExportRequest -Mailbox <username> -FilePath \\servername\verzeichnis\username.pst -BadItemLimit 100

Postfach importieren

New-MailboxImportRequest -Mailbox <username> -FilePath \\servername\verzeichnis\username.pst -BadItemLimit 100

Mailbox Export überwachen

Get-MailboxExportRequest
Get-MailboxExportRequest |Sort-Object -Property Status | ft FilePath, Status

Bulk Export von Postfächern

$allmailboxes = Get-Mailbox
$allmailboxes |% {$_| New-MailboxExportRequest -FilePath "\\localhost\c$\$($_.Alias).pst" -BadItemLimit 100}

Mailqueue (ausführlich) ausgeben. (Info-Link)

Get-Queue | Format-List

Mailqueue erneut abarbeiten (Info-Link)

Retry-Queue 

Maillog durchsuchen. Datum ist amerikanisch! (Info-Link)

Get-MessageTrackingLog -ResultSize Unlimited -Start "5/20/2021 8:00AM" -End "5/20/2021 11:00PM" 
Get-MessageTrackingLog -ResultSize Unlimited -Start "5/20/2021 8:00AM" -End "5/20/2021 11:00PM" | Format-List

Nachrichtentracking, wurde Mail an den Connector übermittelt?

Get-MessageTrackingLog -EventId Send -ResultSize Unlimited -Sender [sender@mail] -Recipients [empfänger@mail] | Format-List Time*,MessageSubject,SourceCo*,Send*,Recipient*
  

DotNet 3x unter Windows 10 nachinstallierten

Am einfachsten geht dies in der (Admin) PowerShell mit folgendem Befehl:

dism.exe /online /enable-feature /featurename:NetFX3 /All 

Sollte keine Internetverbindung bestehen und die Windows 10 Installation DVD zur Hand liegen, so kann man aus dem Ordner Sources das Verzeichnis lxs nach c:\temp kopieren und wie folgt installieren:

dism.exe /online /enable-feature /featurename:NetFX3 /All /Source:c:\temp\sxs /LimitAccess

Merker: Apps entfernen mit Powershell

Am einfachsten kann man unter Windows 10 alle Apps (im Benutzerkontext) mit der Powershell entfernen. Dazu bedarf es nur den einen Befehl:

Get-AppxPackage * | Remove-AppxPackage

Möchte man alle Pakete wieder installieren, so geht das mit folgenden Powershell Befehl:

Get-AppxPackage | foreach {Add-AppxPackage -register „$($_.InstallLocation)\appxmanifest.xml“ -DisableDevelopmentMod} 

SMBv1 und Windows 10

Sollte man sich bei einem älteren Windows Server anmelden wollen, der noch SMBv1 unterstützt, dann muss man Windows 10 (ab Version 1703) dazu bringen dieses wieder zu nutzen. Dies funktioniert wie folgt:

AD Auswertungen mit Get-ADUser

Um mal schnell „Dinge“ im ActiveDirectory (AD) abzufragen eignet sich besonders gut die PowerShell (Active Directory-Modul). Aufgabe war es eben mal schnell die Homelaufwerke der Benutzer zu kontrollieren ob sich nicht noch ein (weitere) falscher Buchstabe eingeschummelt hat.