Powershell

Das hier sind diverse Powershell Commandlets, welche ich in den vergangenen Jahren zusammen geschrieben habe.

Es handelt sich bei den meisten um keine Wollmilchsäue, jedoch bedienen Sie die meisten administrativen Aufgaben, welche sich einfach nicht über die GUI realisieren lassen.

Wenn ihr etwas runter scrollt werdet ihr sehen, dass diese für die verschiedensten Produkte geschrieben sind.

Es handelt sich dabei um Exchange Server 2007 und 2010, OCS 2007 / Lync Server 2010, sowie brand neu O365 bzw Office Online.

Ich werde in Zukunft noch genauer auf die syntaktischen Unterschiede zwischen den einzelnen Produkten eingehen (leider war Microsoft dabei nie so konsequent :\ )

Entschuldigt die zusammengeworfenen Code-Fragmente, …ich bring das irgendwann noch in Form und werde eine übersichtlichere Seite dafür bereitstellen 😉

(O365 – Exchange Online)

Mailbox-Report erstellen und per Mail versenden (funktioniert auch bei lokalen Exchange Server Bereitstellungen)

# MailBox-Report Script

$Username = "username@firma.onmicrosoft.com"

$Password = ConvertTo-SecureString "hierdasPWD" -AsPlainText -Force

$Cred = New-Object System.Management.Automation.PSCredential $Username, $Password

# ------------hier wird eine PS Session zum O365 Server aufgebaut ---------- #

$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $Cred -Authentication Basic -AllowRedirection

Import-PSSession $s

# ------ ab hier beginnt das "Mail-Script" ------- #

get-mailbox | Get-MailboxStatistics | where-object { $_.DisconnectDate -eq $null } | Sort-Object DisplayName| ft displayname,@{expression={$_.TotalItemSize.Value.ToMB()};label="TotalItemSize(MB)"},ItemCount > c:\mailbox_report.txt

# ------------ Send an email ------------------- #
$FromAddress = "absender@maildomain.de"
$ToAddress = "empfaenger@maildomain.de"
$MessageSubject = "Mailbox Report"
$MessageBody = "Attached is TXT file for Mailbox audit report"
$SendingServer = "vielenmailservernistesegalwashiersteht"
$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody
$Attachment = New-Object Net.Mail.Attachment("c:\mailbox_report.txt")
$SMTPMessage.Attachments.Add($Attachment)
$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SMTPClient.Send($SMTPMessage)

# ----- Die Session wird einfach aus sicherheitsgründen wieder beendet -------- #

Get-pssession | remove-pssession

—————————————————————————————–

(Lync Server 2010)

Filtern bestimmter Benutzer anhand von Attributen (leider anders als bei Exchange :-\ )

get-csuser -filter {LineUri -like "*133*}

(OCS ’07 Achtung: Quest AD-Shell-Erweiterung wird benötigt!!!!)

Schaltet AD-Benutzer für OCS-Verbund u. OCS frei, setzt Anmeldenamen aus SAMaccnamen+Domain zusammen, Setzt primären OCS-Pool ( in der Reihenfolge)

Get-QADUser USER | set-qaduser -objectattributes @{'msRTCSIP-FederationEnabled'=$true;'msRTCSIP-UserEnabled'=$true; 'msRTCSIP-PrimaryUserAddress'=("sip:" + $samaccountname + "@SIPDOMAIN.de").ToString(); 'msRTCSIP-PrimaryHomeServer'="FQDN-DES-OCS"   }

———————————————————————————————–

(Exchange ’07 – meist auch für 2010 brauchbar)

Löscht bestimmte SMTP-Adressen aus allen Mailboxen einer Exchange-Umgebung

get-mailbox |% { $a = $_.emailaddresses; $b = $_.emailaddresses; foreach($e in $a) { if ($e.tostring() -like "MAILADRESSE*") {$b -= $e; } } ; $_ | set-mailbox -emailaddresses $b}

—————————————————————————————–

Setzen des Buchungszeitraums aller Raumressourcen in Tagen (X)

get-mailbox -resultsize unlimited | where {$_.resourcetype -eq "room"} | set-mailboxcalendarsettings -bookingwindowindays "X"

—————————————————————————————–

Ausgabe aller Mailbox-Größen einer Datenbank, beginnend mit der Größten

Get-MailboxStatistics -Database "mailbox database" | get-mailboxstatistics | Sort -Property TotalItemSize -descending| select-object DisplayName,@{expression={$_.TotalItemSize.value.ToMB()}},Itemcount

——————————————————————————————-

Ausgabe der „Full Access Permissions“ aller Raumressourcen in eine CSV-Datei

get-mailbox | where {$_.ResourceType -eq "Room"} | get-mailboxpermission | export-csv c:\...\....csv

—————————————————————————————–

Ausgabe aller ActiveSync Devices + Besitzer in der Exchange Umgebung

Get-Mailbox | ForEach {Get-ActiveSyncDeviceStatistics -Mailbox: $_.Identity} | fl Identity,Devicetype

—————————————————————————————–

CMDlet nur auf bestimmte AD-Gruppenmitglieder ausführen / oder auch nicht ausführen (Dokumentation dazu bekommt ihr von mir gern auf Anfrage ;D )

function Get-ADGroupMember{
Param([string]$server,[string]$user,[string]$activesync)
If(!($server)){$server = ([ADSI]"").DC}

$group="AD-GRUPPE"
$g = [ADSI]("WinNT://$server/$group2,group")
$ulist = $g.psbase.invoke("Members") | %{$_.GetType().InvokeMember("Name",'GetProperty', $null, $_, $null)}
if($user){
foreach($u in $ulist){
if($u -eq $user){$found = $true}
}
if($found){$w= "Richtig"}
}

if($w -eq "Richtig") {$activesync=$true}
else {$activesync=$false}

return $activesync
}

Get-Mailbox  |% {$AArray = $_.Alias; foreach($Alias in $AArray) {$AliasString=$Alias.tostring(); $Answer = Get-ADGroupMember -user $AliasString -activesync $false; if ($Answer -ne $true) {HIER DIE DURCHZUFÜHRENDE OPERATION EINTRAGEN } }}

—————————————————————————————–

Update des Offline-Adressbuches

1. OAB neu erstellen

Get-OfflineAddressBook | Update-OfflineAddressBook

2. OAB auf den CAS replizieren

Update-FileDistributionService "ClientAccessServer" -type oab

————————————————————————————————————————————————————

(Exchange ’10)

Ausgabe aller Distribution Groups und deren Benutzer

$temp = Get-DistributionGroup -ResultSize Unlimited | 

foreach($group in $temp) 
{ 
write-output "GroupName:$group " 
Write-output "GroupMembers:" 
Get-DistributionGroupMember $group |ft displayname,alias
write-output ? ? 
} | out-file c:\distr.csv

—————————————————————————————–

Basteln eines Anonymen-Relays

Get-ReceiveConnector <HIER DEN NAMEN DES EMPFANGSCONNECTORS EINTRAGEN> | Add-ADPermission -User "NT-AUTORITÄT\ANONYMOUS-Anmeldung" -ExtendedRights "ms-Exch-SMTP-Accept-Any-Recipient"

—————————————————————————————–

Berechtigung setzen, dass Administror (oder eine Usergruppe) Mailboxen exportieren darf

New-ManagementRoleAssignment ?Role ?Mailbox Import Export? ?User "<username>"
oder
New-ManagementRoleAssignment ?Role ?Mailbox Import Export? ?Group "<usergroup>"

—————————————————————————————–

Export einer Mailbox in eine PST-Datei

New-MailboxExportRequest -Mailbox "user" ?FilePath "\\localhost\d$\pst\Admin.pst"

—————————————————————————————–

Berechtigung für einen User auf einen Public Folder setzen (rekursiv)

C:\Program Files\Microsoft\Exchange Server\V14\Scripts\AddUsersToPFRecursive.ps1 ?TopPublicFolder ?\Oeffentliche Adressen? ?User ?Username? ?Permission Editor

—————————————————————————————–

Gibt alle ActiveSync Devices eines Benutzers aus

Get-ActiveSyncDevice | where {$_.userdisplayname -like "*HIER NAMEN DES USERS*"} | ft devicemodel

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *