Benutzer mit den meisten Antworten
PowerShell - Aus dem AD die Gruppenmitgliedschaft eines Nutzers lesen

Frage
-
Hallo beisammen,
da mir die Praxis fehlt und mich Stück für Stück der Thematik annähere, wollte ich auf diesem Weg ein paar Meinungen abholen. Zum Problem:
Aus einem Gruppenrichtlinien- und Software-Verteilungsprogramm (DSM) soll ein PS-Skript aufgerufen werden. Es soll der Parameter %USERNAME% mitgegeben werden. Das Skript aufzurufen funktioniert simpel per EXECUTE(Pfad und Dateiname). Auch wird der Nutzername mitgegeben als Parameter.
Das PowerShell-Skript soll nun mit dem Parameter (= Nutzername) die Gruppenmitgliedschaften aus dem ActiveDirectory eruieren; speziell die Mitgliedschaften, die mit Mail_ beginnen. Im Anschluss soll nun dem User seine Mail-Postfächer zugeordnet werden, in etwa:
Set('Variable0','Hilfe@Fischerverein-Ratibor.de')
Execute('%_tmpPF%\AddPF.bat %Variable0% %_tmpPF%')Bisher haben wir uns beholfen, dass wir mit der Ermittlung von %USERNAME% die Gruppenmitgliedschaften einzeln abprüfen mit langen If-Abprüfungen. Dies ist sehr fehleranfällig und funktioniert nicht zuverlässig; weswegen wir nur den User-Name übergeben möchten per Execute des PW-Skripts. Danke erst mal!
Heuristiker
Antworten
-
Ich würde in so einem Fall dann doch auf den Komfort der AD-Cmdlets verzichten und den ADSI-Provider bemühen.
#https://gallery.technet.microsoft.com/scriptcenter/f7b246a4-95a2-4408-b1a1-73b53003883c
#https://social.technet.microsoft.com/wiki/contents/articles/4231.working-with-active-directory-using-powershell-adsi-adapter.aspx
Function Get-DistinguishedName ($strUserName)
{
$searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]'')
$searcher.Filter = "(&(objectClass=User)(samAccountName=$strUserName))"
$result = $searcher.FindOne()
Return $result.GetDirectoryEntry().DistinguishedName
}
$userdn = Get-DistinguishedName ($env:USERNAME)
$user = [ADSI]"LDAP://$userdn"
$groups = $User.MemberOf | ForEach-Object {[ADSI]"LDAP://$_"} | Where {$_.cn -like "MAIL_*"}
foreach ($group in $groups)
{
#Hier kann nun beliebiger Code folgen der etwas mit den Gruppenmitgliedschaften anstellen soll
Write-Host $group.cn
}Besser? :D ;)
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Bearbeitet SandroReiter Dienstag, 14. März 2017 07:32
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 16. März 2017 13:55
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 17. März 2017 13:03
Alle Antworten
-
Ich verstehe. ;) Das ist auch etwas schwer zu verstehen, wie ich es schrieb.
Grundsätzlich will ich mit der PowerShell die die MAIL_*-Gruppenmitgliedschaften eines AD-Users abfragen und seine Mitgliedschaften jeweils in eine eigene Variable oder in ein Array schreiben, um es im Anschluss an ein Programm zur Weiterverarbeitung durchzureichen.
$strUserName = "Gust.Bayrhammer"
$strUser = get-qaduser -SamAccountName $strUserName
$Mitgliedschaft = $strUser.memberofDabei sind MAIL_* unsere Mail-Postfächer (verschiedene), die ich bei ihm einrichten möchte.
Wie setze ich aber diese Postfächer aus dem AD heraus?
-
Wow ich hätte ernsthaft gedacht es geht um den Aufruf des Scripts mit parametern.
> Das ist auch etwas schwer zu verstehen, wie ich es schrieb.
Ja und ist es immer noch. :-) Was bedeutet "Wie setze ich aber diese Postfächer aus dem AD heraus"?
Meinst du aus dem Script heraus?Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort. -
Heuristiker,
ich nehme an du möchtest einem neuen User div. Postfächer im Outlook zuordnen bzw. einbinden?
Wenn du den neuen User bei den shared Postfächern "Full Access" gibst wird dieses automatisch bei ihm eingebunden.
get-mailboxpermission
Chris
- Bearbeitet -- Chris -- Freitag, 10. März 2017 19:32
-
Im Grunde möchte ich ein Skript schreiben, welches den Benutzernamen des Users übergeben bekommt, welches anschließend das AD abfragt, in welchen MAIL_-Gruppen der User eingetragen ist und diese MAIL_-Postfächer dann zuweist.
Und für dieses Problem benötige ich Vorschläge, wie das Skript zu schreiben ist.
Ich merke, es ist schwierig, ein Problem zu formulieren. :D Deshalb herzlichen Dank, dass ihr schon mal das Geschriebene auch verstehen und mir helfen wollt.
Danke! :)
-
und diese MAIL_-Postfächer dann zuweist.
Was meinst Du mit zuweisen? Die Gruppenmitgliedschaft im AD scheint ja schon zu existieren.
Meinst Du die Einbindung in Outlook?
Wo wird das Skript laufen? Server, Admin-PC oder beim User selbst?
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Bearbeitet SandroReiter Montag, 13. März 2017 07:34
-
Habt Ihr einen Exchange Server? Was für Postfächer sind das? Freigegebene Postfächer bindet Outlook automatisch ein (siehe Antwort von Chris).
Wenn es Benutzerpostfächer sind, haben die MAIL_* Gruppen die entsprechenden Berechtigungen zum Öffnen des Postfachs oder muss da ein Service-Benutzer zur Authentifizierung mit übergeben werden?
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Bearbeitet SandroReiter Montag, 13. März 2017 09:23
-
$strUserName = "Gust.Bayrhammer"
$strUser = get-qaduser -SamAccountName $strUserName
$Mitgliedschaft = $strUser.memberofDie Fehler solltest Du natürlich nicht mit kopieren ;)
http://stackoverflow.com/questions/5072996/how-to-get-all-groups-that-a-user-is-a-member-of
Hier mal ein Anfang für Dich zum experimentieren:
$username = "hans.wurst" $memberof = Get-ADPrincipalGroupMembership -Identity $username | where {$_.name -like "MAIL_*"} foreach($group in $memberof) { #Hier kann nun beliebiger Code folgen der etwas mit den Gruppenmitgliedschaften anstellen soll, bspw. Einbindung der Postfaecher in Outlook Write-Host $group.name }
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Bearbeitet SandroReiter Montag, 13. März 2017 09:39
-
wie Sandro geschrieben hat...
#Hier kann nun beliebiger Code folgen
Add-Mailboxpermission und der User bekommt automatisch das Postfach hinzugefügt.
https://technet.microsoft.com/en-us/library/bb124097(v=exchg.160).aspx
Chris
-
Add-Mailboxpermission und der User bekommt automatisch das Postfach hinzugefügt.
Ich denke eher in den Postfächern sind die Gruppen "MAIL_PostfachXYZ" hinterlegt, ansonsten wäre diese Gruppenmitgliedschaft beim User im AD ja sinnlos.
Auf die Frage ob Shared oder Benutzerpostfach gab's ja noch keine Antwort ...
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
-
Wenn das Script auf den User-Workstations laufen soll, bedenke bitte auch das dann die RSAT Tools überall installiert sein müssen - sonst gibt es die AD-CmdLets nicht.
Bei Windows 7 müssen diese zusätzlich nach der Installation noch explizit in den Features aktiviert werden.
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Bearbeitet SandroReiter Montag, 13. März 2017 11:40
-
Wenn das Script auf den User-Workstations laufen soll, bedenke bitte auch das dann die RSAT Tools überall installiert sein müssen - sonst gibt es die AD-CmdLets nicht.
Bei Windows 7 müssen diese zusätzlich nach der Installation noch explizit in den Features aktiviert werden.
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com -
...das wäre dann aber aus Kanonen auf Spatzen schießen, nicht? Ich würde in so einem Fall dann doch auf den Komfort der AD-Cmdlets verzichten und den ADSI-Provider bemühen. Oder, wenn die betreffenden "User" die Rechte dafür haben, die AD-Cmdlets per Remoting auf einem DC oder Management Server starten...
Man schießt so oft mit zu großen Kalibern auf kleine Ziele. Das MSU lässt sich ja zentral verteilen.
... aber ja, stimmt natürlich. :)
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Bearbeitet SandroReiter Dienstag, 14. März 2017 07:15
-
Ich würde in so einem Fall dann doch auf den Komfort der AD-Cmdlets verzichten und den ADSI-Provider bemühen.
#https://gallery.technet.microsoft.com/scriptcenter/f7b246a4-95a2-4408-b1a1-73b53003883c
#https://social.technet.microsoft.com/wiki/contents/articles/4231.working-with-active-directory-using-powershell-adsi-adapter.aspx
Function Get-DistinguishedName ($strUserName)
{
$searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]'')
$searcher.Filter = "(&(objectClass=User)(samAccountName=$strUserName))"
$result = $searcher.FindOne()
Return $result.GetDirectoryEntry().DistinguishedName
}
$userdn = Get-DistinguishedName ($env:USERNAME)
$user = [ADSI]"LDAP://$userdn"
$groups = $User.MemberOf | ForEach-Object {[ADSI]"LDAP://$_"} | Where {$_.cn -like "MAIL_*"}
foreach ($group in $groups)
{
#Hier kann nun beliebiger Code folgen der etwas mit den Gruppenmitgliedschaften anstellen soll
Write-Host $group.cn
}Besser? :D ;)
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Bearbeitet SandroReiter Dienstag, 14. März 2017 07:32
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Donnerstag, 16. März 2017 13:55
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 17. März 2017 13:03
-
Wenn Deine Frage damit beantwortet ist, markiere hilfreiche Antworten doch bitte noch als solche mit einem Klick auf "Abstimmen" und Lösung(en) mit einem Klick auf "Als Antwort markieren".
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
-
In der letzten For-Each-Schleife müssten nun die dem Nutzer zugewiesenen Postfächer (MAIL_*) mit folgendem Befehl hinzugefügt werden:
Add-MailboxPermission -Identity $group.cn -User user -AccessRights FullAccess -InheritanceType All;
; falls ich das korrekt so ausführen könnte.
-
In der letzten For-Each-Schleife müssten nun die dem Nutzer zugewiesenen Postfächer (MAIL_*) mit folgendem Befehl hinzugefügt werden:
Add-MailboxPermission -Identity $group.cn -User user -AccessRights FullAccess -InheritanceType All;
; falls ich das korrekt so ausführen könnte.
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
-
-
Erläutere mir bitte diesen Lösungsansatz. Das Standardpostfach des Domain-Users wird automatisiert hinzugefügt; die Funktionspostfächer allerdings nicht. Diese werden bisher per Hand hinzugefügt.
Wie ich verstanden habe hast Du ein AD + Exchange zur Verfügung.
Du möchtest die Funktionspostfächer bei den Benutzern in Outlook lokal einbinden.
Meine Herangehensweise wäre jetzt:
- AD-Gruppe anlegen bspw: MAIL_CHEF_FULLACCESS; _CALENDARONLY; usw.
- Diese Gruppe hinterlege ich beim Postfach chef@firma.de mit den entsprechenden Berechtigungen
Soll jetzt ein Mitarbeiter Zugriff auf das Postfach bekommen, dann füge ich max.mustermann nur der AD Gruppe MAIL_CHEF_FULLACCESS hinzu und fertig.
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
- Bearbeitet SandroReiter Dienstag, 21. März 2017 07:27
-
Sinnvoller Vorschlag; das werde ich ausprobieren und würde mich ja freuen, wenn ich es auch auf diesem Weg ermöglichen kann ohne Skriptspielchen. Der Grund, warum ich erst mal das Skript fertigstellen möchte, ist die Anforderung, es erst mal so zu versuchen.
Danke für die Hilfe! :)
-
Sinnvoller Vorschlag;
das werde ich ausprobieren und würde mich ja freuen, wenn ich es auch auf diesem Weg ermöglichen kann ohne Skriptspielchen.
Wenn es klappt, freue ich mich über einen Klick auf "Abstimmen" für eine hilfreiche Antwort und/oder "Als Antwort markieren" wenn es Dein Thema ebenfalls beantwortet ;)
Der Grund, warum ich erst mal das Skript fertigstellen möchte, ist die Anforderung, es erst mal so zu versuchen.
Sehr guter Vorsatz! Auch wenn es am Ende vielleicht nicht zum Einsatz kommt, hast Du auf jeden Fall was dabei gelernt.
Danke für die Hilfe! :)
Freundliche Grüße
Sandro
MCSA: Windows Server 2012
Fachinformatiker Fachrichtung Systemintegration (IHK, 07/2013)
-
das werde ich ausprobieren und würde mich ja freuen, wenn ich es auch auf diesem Weg ermöglichen kann ohne Skriptspielchen.
Wenn es klappt, freue ich mich über einen Klick auf "Abstimmen" für eine hilfreiche Antwort und/oder "Als Antwort markieren" wenn es Dein Thema ebenfalls beantwortet ;) -
Der Thread wurde geteilt Martin, scheinbar hat sich das mit deiner Antwort überschnitten. Kann du sie hier noch mal posten bitte: LINK
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.