Möchte man mittels PowerShell alle Mailboxen ermitteln, welche an eine andere E-Mailadresse (intern oder extern) forwarden, bzw. redirecten, kann man folgenden Befehl dazu verwenden:
[PS] C:\Windows\system32>foreach ($i in (Get-Mailbox -ResultSize unlimited)) { Get-InboxRule -Mailbox $i.DistinguishedName | where {$_.RedirectTo -or $_.ForwardTo } | fl MailboxOwnerId,Description >> C:\rules.txt }
Posts mit dem Label PowerShell werden angezeigt. Alle Posts anzeigen
Posts mit dem Label PowerShell werden angezeigt. Alle Posts anzeigen
30.09.15
[How-To] Exchange 2010 - Vollzugriff ohne Automapping einrichten
Ab Exchange 2010 SP1 wird ein Postfach, auf welches man Vollzugriff erhalten hat, per Automapping in Outlook eingebunden.
Dies kann beim Vollzugriff auf viele Postfächer zu erheblichen Leistungseinbußen in Outlook führen.
Möchte man nun das Automapping für bestimmte Postfächer deaktivieren, muss man folgendermaßen vorgehen:
In diesem Beispiel wird der Vollzugriff des Benutzers "Administrator" auf das Postfach von Benutzer "Test1" entfernt:
Remove-MailboxPermission -Identity Test1 -User Administrator -AccessRights FullAccess -InheritanceType All
Nachfolgend wird die Berechtigung für den Vollzugriff wieder erteilt, diesmal jedoch ohne Automapping:
Add-MailboxPermission -Identity Test1 -User Administrator -AccessRights:FullAccess -AutoMapping $false
Beim nächsten Start von Outlook werden die Postfächer, auf welche man Vollzugriff hat, nicht mehr automatisch geöffnet.
Dies kann beim Vollzugriff auf viele Postfächer zu erheblichen Leistungseinbußen in Outlook führen.
Möchte man nun das Automapping für bestimmte Postfächer deaktivieren, muss man folgendermaßen vorgehen:
In diesem Beispiel wird der Vollzugriff des Benutzers "Administrator" auf das Postfach von Benutzer "Test1" entfernt:
Remove-MailboxPermission -Identity Test1 -User Administrator -AccessRights FullAccess -InheritanceType All
Nachfolgend wird die Berechtigung für den Vollzugriff wieder erteilt, diesmal jedoch ohne Automapping:
Add-MailboxPermission -Identity Test1 -User Administrator -AccessRights:FullAccess -AutoMapping $false
Beim nächsten Start von Outlook werden die Postfächer, auf welche man Vollzugriff hat, nicht mehr automatisch geöffnet.
Tags:
Exchange,
Outlook,
PowerShell,
Technik
12.08.15
[How-To] Programme auf mehreren PCs automatisiert updaten
Da in letzter Zeit sehr viele Sicherheitsupdates für Anwendungen wie beispielsweise Adobe Flash oder Java released werden, stellte sich mir die Frage, wie ich in unserem Unternehmensnetzwerk mit dem geringstmöglichen Aufwand unsere Standardanwendungen per Taskplanner automatisiert patchen kann (das manuelle Patchen von 100+ PCs verursacht einen immensen administrativen Aufwand).
Als Anwendung, welche das Patchen an sich übernimmt, fiel meine Wahl auf Ninite, da diese in der ProVersion sehr viele Funktionen bereithält, welche man per Kommandozeile automatisieren kann.
Darüberhinaus lädt Ninite den jeweiligen Patch für ein Programm einmalig herunter und verteilt ihn dann über das lokale Netz, anstatt dass jeder PC selbständig die Anwendung aktualisiert.
Per Taskplanner lasse ich stündlich ein Skript (ninite_PC.bat) ausführen, welches Ninite auf allen laufenden PCs im Firmennetzwerk ausführt. Um alle laufenden PCs zu erhalten, wird wiederum ein weiteres Skript (running_machines.bat) ausgeführt, welches per Ping alle laufenden Rechner in ein Textfile schreibt. Dieses Textfile wird vom ersten Batchskript als Grundlage für die zu prüfenden und ggf. zu patchenden Rechner benutzt.
Nach Ausführung des Patchvorganges versendet die "ninite_PC.bat" per Powershell-Skript (ninite.ps1) noch eine E-Mail mit einem Patchreport an unser Support-Postfach.
ninite_PC.bat
@echo OFF
rem Variable für Arbeitsverzeichnis setzen
set PFAD=D:\Tools\Ninite
rem ermitteln der eingeschalteten Rechner im Netzwerk
CALL %PFAD%\running_machines.bat
echo.
echo.
cls
echo Running Ninite on responding machines
rem laufende PCs prüfen und patchen
%PFAD%\NinitePro.exe /remote file:%PFAD%\IPs.txt /locale de-DE /silent %PFAD%\report\report_PC.txt /select Acrobat Chrome Firefox Flash "Flash (IE)" Java Reader "Reader DC" Silverlight Skype /updateonly /disableshortcuts /disableautoupdate
rem Report per mail an Support versenden
Powershell.exe -ep RemoteSigned -File "D:\Tools\Ninite\ninite.ps1"
rem löschen des versendeten Reports
del "%PFAD%\report\report_PC.txt"
running_machines.bat
@echo OFF
set PFAD=D:\Tools\Ninite
echo running_machines.bat
echo Probing alive computers in Local Area Network
echo.
ping -n 2 127.0.0.1 > NUL
rem delete old files if existing
echo.
echo.
echo deleting old probing files!
del %PFAD%\ping.txt
del %PFAD%\results.txt
del %PFAD%\IPs.txt
echo.
ping -n 2 127.0.0.1 > NUL
rem pingen der PCs, welche in der machines.txt definiert wurden
echo pinging local workstations
echo.
echo.
for /F "tokens=*" %%A in (%PFAD%\machines.txt) do ping -n 1 %%A >> %PFAD%\ping.txt
echo writing responding machines to results.txt
echo.
echo.
ping -n 4 127.0.0.1 > NUL
CALL :RESULTS
echo writing IPs of alive machines to IPs.txt
echo.
echo.
ping -n 4 127.0.0.1 > NUL
CALL :IPs
:RESULTS
rem entfernen aller nicht benötigten Zeilen der Pingausgabe
rem aaa.bbb.ccc steht hier für IPs, welche gefiltert werden sollen
type %PFAD%\ping.txt | findstr "." | findstr /v Ping | findstr /v aaa.bbb.ccc | findstr /v Pakete | findstr /v Ca. | findstr /v nicht | findstr /v Verlust | findstr /v Minimum | findstr /v Zeitberschreitung > %PFAD%\results.txt
EXIT /B
:IPs
rem IP-Adressen in temporäre Datei schreiben
for /F "tokens=3" %%i in (%PFAD%\results.txt) do echo %%i >> %PFAD%\IPs_temp.txt
ping -n 2 127.0.0.1 > NUL
for /F "tokens=*" %%A in (%PFAD%\IPs_temp.txt) do CALL :SUB_A %%A
CALL :SUB_B
GOTO :EOF
:SUB_A
rem Doppelpunkte hinter den IP-Adressen entfernen
set str=%1
set str=%str::=%
echo %str% >> %PFAD%\IPs.txt
EXIT /B
:SUB_B
rem entfernen der temporären IP-Liste
del %PFAD%\IPs_temp.txt
EXIT /B
ninite.ps1
Send-MailMessage -from "sender@domain.com" `
-to "recipient@domain.com" `
-subject "Ninite Report" `
-body "Results of Ninite" `
-Attachment "D:\Tools\Ninite\report\report_PC.txt" -smtpServer server.domain.com
Als Anwendung, welche das Patchen an sich übernimmt, fiel meine Wahl auf Ninite, da diese in der ProVersion sehr viele Funktionen bereithält, welche man per Kommandozeile automatisieren kann.
Darüberhinaus lädt Ninite den jeweiligen Patch für ein Programm einmalig herunter und verteilt ihn dann über das lokale Netz, anstatt dass jeder PC selbständig die Anwendung aktualisiert.
Per Taskplanner lasse ich stündlich ein Skript (ninite_PC.bat) ausführen, welches Ninite auf allen laufenden PCs im Firmennetzwerk ausführt. Um alle laufenden PCs zu erhalten, wird wiederum ein weiteres Skript (running_machines.bat) ausgeführt, welches per Ping alle laufenden Rechner in ein Textfile schreibt. Dieses Textfile wird vom ersten Batchskript als Grundlage für die zu prüfenden und ggf. zu patchenden Rechner benutzt.
Nach Ausführung des Patchvorganges versendet die "ninite_PC.bat" per Powershell-Skript (ninite.ps1) noch eine E-Mail mit einem Patchreport an unser Support-Postfach.
ninite_PC.bat
@echo OFF
rem Variable für Arbeitsverzeichnis setzen
set PFAD=D:\Tools\Ninite
rem ermitteln der eingeschalteten Rechner im Netzwerk
CALL %PFAD%\running_machines.bat
echo.
echo.
cls
echo Running Ninite on responding machines
rem laufende PCs prüfen und patchen
%PFAD%\NinitePro.exe /remote file:%PFAD%\IPs.txt /locale de-DE /silent %PFAD%\report\report_PC.txt /select Acrobat Chrome Firefox Flash "Flash (IE)" Java Reader "Reader DC" Silverlight Skype /updateonly /disableshortcuts /disableautoupdate
rem Report per mail an Support versenden
Powershell.exe -ep RemoteSigned -File "D:\Tools\Ninite\ninite.ps1"
rem löschen des versendeten Reports
del "%PFAD%\report\report_PC.txt"
running_machines.bat
@echo OFF
set PFAD=D:\Tools\Ninite
echo running_machines.bat
echo Probing alive computers in Local Area Network
echo.
ping -n 2 127.0.0.1 > NUL
rem delete old files if existing
echo.
echo.
echo deleting old probing files!
del %PFAD%\ping.txt
del %PFAD%\results.txt
del %PFAD%\IPs.txt
echo.
ping -n 2 127.0.0.1 > NUL
rem pingen der PCs, welche in der machines.txt definiert wurden
echo pinging local workstations
echo.
echo.
for /F "tokens=*" %%A in (%PFAD%\machines.txt) do ping -n 1 %%A >> %PFAD%\ping.txt
echo writing responding machines to results.txt
echo.
echo.
ping -n 4 127.0.0.1 > NUL
CALL :RESULTS
echo writing IPs of alive machines to IPs.txt
echo.
echo.
ping -n 4 127.0.0.1 > NUL
CALL :IPs
:RESULTS
rem entfernen aller nicht benötigten Zeilen der Pingausgabe
rem aaa.bbb.ccc steht hier für IPs, welche gefiltert werden sollen
type %PFAD%\ping.txt | findstr "." | findstr /v Ping | findstr /v aaa.bbb.ccc | findstr /v Pakete | findstr /v Ca. | findstr /v nicht | findstr /v Verlust | findstr /v Minimum | findstr /v Zeitberschreitung > %PFAD%\results.txt
EXIT /B
:IPs
rem IP-Adressen in temporäre Datei schreiben
for /F "tokens=3" %%i in (%PFAD%\results.txt) do echo %%i >> %PFAD%\IPs_temp.txt
ping -n 2 127.0.0.1 > NUL
for /F "tokens=*" %%A in (%PFAD%\IPs_temp.txt) do CALL :SUB_A %%A
CALL :SUB_B
GOTO :EOF
:SUB_A
rem Doppelpunkte hinter den IP-Adressen entfernen
set str=%1
set str=%str::=%
echo %str% >> %PFAD%\IPs.txt
EXIT /B
:SUB_B
rem entfernen der temporären IP-Liste
del %PFAD%\IPs_temp.txt
EXIT /B
ninite.ps1
Send-MailMessage -from "sender@domain.com" `
-to "recipient@domain.com" `
-subject "Ninite Report" `
-body "Results of Ninite" `
-Attachment "D:\Tools\Ninite\report\report_PC.txt" -smtpServer server.domain.com
Tags:
batch,
Ninite,
PowerShell,
Scripting,
Technik
18.05.15
Email per Powershell versenden
Hier eine kurze Anleitung, wie man in Windows mittels Powershell Emails versenden kann.
Ausführen von Skripten prüfen und gegebenenfalls erlauben:
C:\> Get-ExecutionPolicy -List
C:\> Set-ExecutionPolicy RemoteSigned
Skript zum versenden von Mails erstellen:
$EmailFrom = "sender@domain.com"
$EmailTo = "recipient@otherdomain.com"
$Subject = "Betreff"
$Body = "Was soll in der Mail stehen?"
$SMTPServer = "smtp.domain.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("usr", "pass");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
$EmailFrom, $EmailTo, $SMTPServer, "usr" und "pass" müssen durch die entsprechenden Werte ersetzt werden.
Ausführen von Skripten prüfen und gegebenenfalls erlauben:
C:\> Get-ExecutionPolicy -List
C:\> Set-ExecutionPolicy RemoteSigned
Skript zum versenden von Mails erstellen:
$EmailFrom = "sender@domain.com"
$EmailTo = "recipient@otherdomain.com"
$Subject = "Betreff"
$Body = "Was soll in der Mail stehen?"
$SMTPServer = "smtp.domain.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("usr", "pass");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
$EmailFrom, $EmailTo, $SMTPServer, "usr" und "pass" müssen durch die entsprechenden Werte ersetzt werden.
10.12.14
[Exchange] Vollzugriff auf alle Postfächer erteilen
Will man dem Administrator-Konto Vollzugriff auf alle Postfächer erteilen, kann man dies mit dem folgenden PowerShell Befehl bewerkstelligen:
Postfachberechtigungen entfernen:
Postfachberechtigungen prüfen:
Get-Mailbox | Add-MailboxPermission -User Administrator -AccessRights Fullaccess -InheritanceType allPostfachberechtigungen entfernen:
Remove-MailboxFolderPermission -Identity Username:\Posteingang -User Username.Zugriff Postfachberechtigungen prüfen:
Get-MailboxPermission -Identity Username11.10.14
Exchange Postfächer mit aktiviertem Forwarding auflisten
Mit dem untenstehenden Befehl kann man sämtliche Postfächer auflisten, welche Weiterleitungen konfiguriert haben.
Mit "Select" wird die Ausgabe außerdem noch angepasst, so dass man den Namen der Mailbox und die Adresse aufgelistet bekommt wohin weitergeleitet wird. DeliverToMailboxAndForward zeigt an, ob die Mailbox nur weiterleitet, oder ob hier auch Mails im entsprechenden Postfach gespeichert werden.
Get-Mailbox | Where {$_.ForwardingAddress -ne $null} | Select Name, ForwardingAddress, DeliverToMailboxAndForward
Mit "Select" wird die Ausgabe außerdem noch angepasst, so dass man den Namen der Mailbox und die Adresse aufgelistet bekommt wohin weitergeleitet wird. DeliverToMailboxAndForward zeigt an, ob die Mailbox nur weiterleitet, oder ob hier auch Mails im entsprechenden Postfach gespeichert werden.
Get-Mailbox | Where {$_.ForwardingAddress -ne $null} | Select Name, ForwardingAddress, DeliverToMailboxAndForward
Tags:
Exchange,
Office 365,
PowerShell,
Technik
30.09.14
Exchange Online reply Adresse ändern
Um die Antwortadresse eines Empfängers in Exchange Online zu ändern muss man folgendermaßen vorgehen:
Sollte "-PrimarySMTPaddress" nicht funktionieren, kann man auch folgenden Parameter verwenden:
-WindowsEmailAddress
- An Exchange Online via Powershell anmelden
- set-mailbox -identity user@domain.com -PrimarySMTPaddress replyaddress@domain.com
Sollte "-PrimarySMTPaddress" nicht funktionieren, kann man auch folgenden Parameter verwenden:
-WindowsEmailAddress
15.09.14
Automatisiert Verteilerlisten erstellen und Mitglieder hinzufügen
Um mehrere Verteiler automatisiert zu erstellen und mehrere Mitglieder hinzuzufügen, muss man folgende Schritte befolgen:
1.Windows PowerShell installieren und konfigurieren.
2. Mit PowerShell an Exchange Online anmelden.
=========
Mehrere Verteiler auf einmal erstellen
1. CSV Datei vorbereiten um mehrere Verteiler zu importieren und auf lokalem Datenträger abspeichern (z.B.: C:\verteiler.csv ).
Beispiel:
Name, Type
Group1, Distribution
Group2, Distribution
Hinweis:
Name stellt hierbei den Anzeigenamen der Verteilerliste dar.
2. Der untenstehende Befehl muss ausgeführt werden, um die Verteiler zu importieren:
Import-CSV "C:\verteiler.csv" | foreach {New-DistributionGroup -Name $_.name -Type $_.Type}
==========
Mehrere Mitglieder zu den Verteilern hinzufügen
1.CSV Datei mit den Benutzerinformationen wie, Display name, Alias, E-mail address, erstellen und auf lokalem Datenträger abspeichern (z.B.: C:\benutzer.csv ).
Beispiel:
Display name, Alias, E-mail address
Member1, member1, member1@contoso.com
Member2, member2, member2@contoso.com
2. Die CSV Datei mittels PowerShell an Exchange Online übermitteln.
Folgendes cmdlet muss dafür ausgeführt werden:
Import-Csv "C:\benutzer.csv" | foreach{Add-DistributionGroupMember -Identity "GroupName" -Member $_.alias}
Hinweis:
GroupName stellt hierbei den Namen des Verteilers dar, wo die Benutzer hinzugefügt werden sollen.
Tags:
Exchange,
Office 365,
PowerShell,
Scripting,
Technik
Mailbox Servername via Powershell ermitteln
Möchte man Outlook manuell konfigurieren, benötigt man auch den Namen des Mailboxservers, an welchem man sich anmelden möchte.
Hat man nun ein Office 365 Konto kann es sich mitunter schwierig gestalten, diesen zu ermitteln.
Relativ einfach geht dies per Powershell.
An Exchange Online via Powershell anmelden
Die recipient Liste in eine CSV Datei exportieren:
get-recipient |export-csv C:\recipients.csv
ExchangeGuid + mailbox.outlook.com = Name des Mailboxservers.
Tags:
Exchange,
Outlook,
PowerShell,
Technik
Exchange Online Administration mittels Powershell
Mittels Powershell an Exchange anmelden
Powershell mit erhöhten Rechten ausführen
MSOL credentials an Powershell Session übergeben:
$LiveCred = Get-Credential
$LiveCred = Get-Credential
MS Exchange Session starten:
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $LiveCred -Authentication Basic -AllowRedirection
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $LiveCred -Authentication Basic -AllowRedirection
Das Import-PSSession cmdlet importiert Befehle (cmdlets, functions und aliases) von einer lokalen oder entfernten PSSession in die aktuelle Session. Man kann jeden BEfehl, den das Get-Command cmdlet in der PSSession finden kann importieren. In diesem Fall werden cmdlets von ps.outlook.com/powershell importiert.
Import-PSSession $Session
Falls die Skripte auf dem Computer nicht ausgeführt werden können, muss der folgende Befehl ausgeführt werden, um die Ausführung von remote Scripts zu erlauben:
Set-ExecutionPolicy Unrestricted
Wenn die Administration von Exchange Online abgeschlossen ist, muss man die Verbindung zu MS Exchange mit dem folgenden Befehl schließen, da sie ansonsten für 15 Minuten offen bleibt, bis sie in einen timeout läuft:
Remove-PSSession $Session
Tags:
Exchange,
Office 365,
PowerShell,
Technik
22.08.13
Outlook 2010/2013 manuell mit Office365 verbinden
Hier eine ausführliche Anleitung, wie man Outlook manuell mit Office365 verbindet.
Tags:
Office 365,
Outlook,
PowerShell,
Technik
24.05.12
Exchange 2010 - New-MoveRequest schlägt fehl
Fehler:
Fehler bei Active Directory-Vorgang mit DC.DOMAIN.TLD. Bei diesem Fehler ist kein Wiederholungsversuch möglich. Zusätzliche Informationen: Die Zugriffsrechte reichen für diesen Vorgang nicht aus.
Active Directory-Antwort: 00002098: SecErr: DSID-03150BB9, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0
.
Der Benutzer verfügt nicht über die erforderlichen Zugriffsrechte.
Ausführungsversuch eines Exchange-Verwaltungsshellbefehls:
'DOMAIN.TLD/OU/CN' | New-MoveRequest -TargetDatabase 'DATABASE_NAME'
Verstrichene Zeit: 00:00:01
Um diesen Fehler zu beheben, hilft folgender simple Workaround:
Im Active Directory muss beim entsprechenden User unter den erweiterten Sicherheitseinstellungen die Option “Vererbbare Berechtigungen des übergeordneten Objekts einschließen” aktiviert werden.
Fehler bei Active Directory-Vorgang mit DC.DOMAIN.TLD. Bei diesem Fehler ist kein Wiederholungsversuch möglich. Zusätzliche Informationen: Die Zugriffsrechte reichen für diesen Vorgang nicht aus.
Active Directory-Antwort: 00002098: SecErr: DSID-03150BB9, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0
.
Der Benutzer verfügt nicht über die erforderlichen Zugriffsrechte.
Ausführungsversuch eines Exchange-Verwaltungsshellbefehls:
'DOMAIN.TLD/OU/CN' | New-MoveRequest -TargetDatabase 'DATABASE_NAME'
Verstrichene Zeit: 00:00:01
Um diesen Fehler zu beheben, hilft folgender simple Workaround:
Im Active Directory muss beim entsprechenden User unter den erweiterten Sicherheitseinstellungen die Option “Vererbbare Berechtigungen des übergeordneten Objekts einschließen” aktiviert werden.
Abonnieren
Posts (Atom)