Schlagwort-Archive: PowerShell Framework

PowerShell ist ein plattformübergreifendes Framework und Skriptsprache von Microsoft zur Automatisierung, Konfiguration und Verwaltung von Systemen.

Exchange MailboxStatistics Mail-Report

Exchange MailboxStatistics für Email Report

Exchange Administratoren möchten über die Aktivitäten der CAS und DAG informiert sein. Das PowerShell cmdlet Get-MailboxStatistics ermöglicht hierzu Reports zu erstellen.

Dieser Beitrag soll in einem Beispiel die Möglichkeiten aufzeigen, anhand eines einfachen Script eine Statistik der Mailboxen in einer Exchange Organisation zu erzeugen und als E-Mail Report zu versenden. Der Report enthält ferner den Exchange Health Status und die Speicherbelegung der Festplatten.

Installation

Das PowerShell Script erzeugt die Mailbox Statistic und den Health Status des Servers.

$a = "<style>"
$a = $a + "BODY{background-color:GhostWhite;}"
$a = $a + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;}"
$a = $a + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:Gold;}"
$a = $a + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:Azure;}"
$a = $a + "</style>"

Add-PSSnapin Microsoft.Exchange.Management.Powershell.Admin -erroraction silentlyContinue

$email = ("your@email.com")
$date = (Get-Date -format F)
$exch = [system.environment]::MachineName
$build = (Get-ExchangeServer -Identity $env:exch | ft name,AdminDisplayVersion -HideTableHeaders -AutoSize)
$path = [Environment]::GetFolderPath('ApplicationData')
$file = "$path\report.html"
	if (test-Path $path\report.html) { remove-Item $path\report.html;
	Write-Host -ForegroundColor white -BackgroundColor Red    "Old file removed"
	}
ConvertTo-Html -Head $a  -Title "Exchange Mailbox statistics and health status for $exch" -Body "<h1> Computer Name : $exch </h1>" >  "$path\report.html"
$mailboxdata = (Get-MailboxStatistics -Server $exch | Sort-Object TotalItemSize -Descending | select DisplayName,@{label="TotalItemSize(MB)";expression={$_.TotalItemSize.Value.ToMB()}},ItemCount,LastLogonTime)
$HealthReport = (Get-HealthReport -Server $exch | Where-Object { $_.alertvalue -ne "Healthy" } | Select Server,State,HealthSet,HealthGroup,AlertValue,LastTransitionTime,MonitorCount,HaImpactingMonitorCount)
$disk = (Get-WMIObject Win32_Logicaldisk -ComputerName $exch | Select PSComputername,DeviceID,@{Name="SizeGB";Expression={$_.Size/1GB -as [int]}},@{Name="FreeGB";Expression={[math]::Round($_.Freespace/1GB,2)}})
$date | Out-file $file -append
$build | Out-file $file -append
$mailboxdata | ConvertTo-html -Body "<H2> Mailbox Statistics </H2>" >> $file
$HealthReport | ConvertTo-html -Body "<H2> Exchange Health Report </H2>" >> $file
$disk | ConvertTo-html -Body "<H2> Disk Space usage </H2>" >> $file
$smtpServer = "127.0.0.1"
$att = new-object System.Net.Mail.Attachment($file)
$msg = new-object System.Net.Mail.MailMessage
$smtp = new-object System.Net.Mail.SmtpClient($smtpServer)
$msg.From = "no_reply@$exch"
$msg.To.Add($email)
$msg.Subject = "Notification report from $exch"
$msg.Body = "$exch MailboxStatistics generated $date reported to attachment $file"
$msg.Attachments.Add($att)
$smtp.Send($msg)
$att.Disposen

Die Code Zeilen in eine Datei report.ps1 speichern und in der Exchange Management Shell mit .\report.ps1 ausführen. Bei $email wird ein gültiger E-Mail Empfänger definiert. Der Empfänger muss in der DAG existieren in dieser der Script ausgeführt wird. Sollen externe Empfänger den Report erhalten, kann für $smtpServer als Wert ein externer Host oder Mail Transport Agent angegeben werden.

Aus dem Aufgabenplaner lässt sich der Script geplant ausführen, zum Beispiel Täglich um 20.00 Uhr, dabei wird im Register Action im Feld Programm/Script:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

eingetragen, und im Feld Argumente:

-psconsolefile "D:\Program Files\Microsoft\Exchange Server\V15\Bin\exshell.psc1" -file "C:\windows\system32\report.ps1"

eingefügt. Damit wird der Script in der Exchange Management Shell ausgeführt. Im Register Allgemein muss die Checkbox Mit höchsten Privilegien ausführen aktiviert werden.

Exchange MailboxStatistics für Email Report

Release Update und Bugfix auf Github

Windows 10 Standard-Apps deinstallieren

Vorinstallierte Windows 10 Bloatware loswerden

Windows 10 ist schon ab Werk vollgestopft mit zahlreichen Apps die uns Microsoft vorinstalliert. Auf dem Arbeitsplatz in Unternehmen sind die Apps unerwünscht, oder sind gar untersagt. Viele Apps davon sind reine Werbung. Mit dem folgenden PowerShell Befehl können diese oft überflüssigen Windows Apps ganz leicht deinstalliert werden. Falls nötig, können Apps auch erneut installiert werden, mehr am ende dieses Posts.

Apps aus PowerShell entfernen

Hierzu auf Start gehen und Powershell eingeben, klicke oben auf den Eintrag Windows PowerShell, um die PowerShell zu starten.

Die folgenden Zeilen mit Copy & Paste einfügen und die Eingabetaste drücken.

Get-AppxPackage *mspaint* | Remove-AppxPackage
Get-AppxPackage *alarms* | Remove-AppxPackage
Get-AppxPackage *camera* | Remove-AppxPackage
Get-AppxPackage *communicationsapp* | Remove-AppxPackage
Get-AppxPackage *bingfinance* | Remove-AppxPackage
Get-AppxPackage *bingnews* | Remove-AppxPackage
Get-AppxPackage *getstarted* | Remove-AppxPackage
Get-AppxPackage *insiderhub* | Remove-AppxPackage
Get-AppxPackage *officehub* | Remove-AppxPackage
Get-AppxPackage *skypeapp* | Remove-AppxPackage
Get-AppxPackage *solitairecollection* | Remove-AppxPackage
Get-AppxPackage *sticky* | Remove-AppxPackage
Get-AppxPackage *twitter* | Remove-AppxPackage
Get-AppxPackage *windowsmaps* | Remove-AppxPackage
Get-AppxPackage *messaging* | Remove-AppxPackage
Get-AppxPackage *zunevideo* | Remove-AppxPackage
Get-AppxPackage *people* | Remove-AppxPackage
Get-AppxPackage *OneNote* | Remove-AppxPackage
Get-AppxPackage *windowsphone* | Remove-AppxPackage
Get-AppxPackage *photo* | Remove-AppxPackage
Get-AppxPackage *soundrec* | Remove-AppxPackage
Get-AppxPackage *flipboard* | Remove-AppxPackage
Get-AppxPackage *minecraft* | Remove-AppxPackage
Get-AppxPackage *sway* | remove-appxpackage
Get-AppxPackage *xbox* | Remove-AppxPackage

Mit dem Script RemoveWindowsStoreApp.ps1 werden alle Apps aufgelistet, die man einzeln, oder auch mehrere durch Kommagetrennt entfernen kann. Der Script lässt sich aus dem Microsoft Technet Script Center herunterladen: technet.microsoft.com

In der als Administrator geöffneten PowerShell den Script starten, die Zeichenfolge & .\  bezweckt die Ausführung :

PS C:\>
PS C:\> & .\RemoveWindowsStoreApp.ps1

Alle Apps ausser die Store App löschen

Sollen alle Apps gelöscht werden, mit Ausnahme der Windows Store App, damit ggf. später Apps aus dem Store wieder installiert werden können, entfernt folgendes Cmdlet alle Apps ausser der Store App:

Get-AppxPackage | where-object {$_.name -notlike "*store*"} | Remove-AppxPackage

Crapware und OneDrive entfernen

Nach einer neu Installation von Windows 10 liegen mehrere Apps und Programme vor, die man oft nicht möchte, sogenannte Crapware, will man sämtliche Apps und auch OneDrive komplett Deinstallieren, kann folgender Script ausgeführt werden, in einer als Administrator geöffneten Eingabeaufforderung:

@echo off
rem Uninstall OneDrive and Apps
rem Cleanup Batch Created: 16.7.2016 CEST
rem Don Matteo <think@unblog.ch>
rem Run this batch out from command prompt as administrator
rem using RUNAS with Domain Administrator
rem runas /user:administrator@%USERDNSDOMAIN% /savecred "taskkill /f /im OneDrive.exe"
taskkill /f /im OneDrive.exe
if exist %SystemRoot%\SysWOW64\OneDriveSetup.exe; %SystemRoot%\SysWOW64\OneDriveSetup.exe /uninstall
if exist %SystemRoot%\System32\OneDriveSetup.exe; %SystemRoot%\System32\OneDriveSetup.exe /uninstall
for %%f in (comment.cmtx,Registry.pol) do xcopy %%f %SystemRoot%\System32\GroupPolicy\Machine /y /v
REG DELETE HKCR\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6} /v System.IsPinnedToNameSpaceTree /f
REG ADD HKCR\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6} /v System.IsPinnedToNameSpaceTree /t REG_DWORD /d "0"
PowerShell.exe -Command "Get-AppxPackage | where-object {$_.name –notlike "*store*"} | Remove-AppxPackage"

Zu diesem Script werden zwei Dateien für die GPO benötigt, die Dateien comment.cmtx und Registry.pol werden von cleanup.cmd in den GroupPolicy Ordner kopiert. Damit wird verhindert das OneDrive erneut installiert wird. Die Dateien können zusammen mit dem Batch hier heruntergeladen werden. Der Batch cleanup.cmd muss aus dem Pfad ausgeführt werden, in diesem sich die Dateien befinden. Der Computer sollte nicht in einer Windows Domäne sein.

Windows App Store wieder herstellen

Soll der App Store wieder hergestellt werden, dann mit gedrückter Shift + Ctrl-Taste die PowerShell öffnen und mit folgendem Cmdlet alle Apps auflisten, dann nach unten scrollen bis man den Microsoft Windows Store findet:

Get-AppxPackage | Select Name,PackageFullName

Noch einfacher gehts mit:

Get-AppxPackage | Where-Object {$_.PackageFullName -like "*Microsoft.WindowsStore*"}

Get-AppxPackage Microsoft.WindowsStore zeigt die Details:

PS C:\> Get-AppxPackage Microsoft.WindowsStore

Name              : Microsoft.WindowsStore
Publisher         : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Architecture      : X64
ResourceId        :
Version           : 11602.1.26.0
PackageFullName   : Microsoft.WindowsStore_11602.1.26.0_x64__8wekyb3d8bbwe
InstallLocation   : C:\Program Files\WindowsApps\Microsoft.WindowsStore_11602.1.26.0_x64__8wekyb3d8bbwe
IsFramework       : False
PackageFamilyName : Microsoft.WindowsStore_8wekyb3d8bbwe
PublisherId       : 8wekyb3d8bbwe
IsResourcePackage : False
IsBundle          : False
IsDevelopmentMode : False
Dependencies      : {Microsoft.NET.Native.Framework.1.1_1.0.23115.0_x64__8wekyb3d8bbwe,
                    Microsoft.NET.Native.Runtime.1.1_1.1.23406.0_x64__8wekyb3d8bbwe,
                    Microsoft.VCLibs.140.00_14.0.24123.0_x64__8wekyb3d8bbwe,
                    Microsoft.WindowsStore_11602.1.26.0_neutral_split.scale-125_8wekyb3d8bbwe...}

Nun den Pfad von der Zeile 8 bei PackageFullName kopieren, die Versionsnummer und die PublisherId, hier ist es die Zeichenfolge  _11602.1.26.0_x64__8wekyb3d8bbwe, in das Cmdlet Add-AppxPackage übernehmen:

Add-AppxPackage -register "C:\Program Files\WindowsApps\Microsoft.WindowsStore_11602.1.26.0_x64__8wekyb3d8bbwe\AppxManifest.xml" -DisableDevelopmentMode

Hierdurch wird nun der App Store von Windows 10 wieder nutzbar und es lassen sich Apps aus dem Store laden.