makaroni
Goto Top

AD User auslesen und in Datei mit Logo abspeichern

Hallo zusammen,

ich stehe vor eine neuern Aufgabe. Ich möchte gerne AD-User aus einer entsprechende Gruppe auslesen.

Diese sollen in eine Datei, csv, html, doc... exportiert werden. Wichtig ist, dass sich die Anzahl der vorhandenen User, sowie deren Name in dem Dokument befindet.

außerdem soll noch ein Logo der Firma automatisch in der Dokument bei der Erzeugung eingepflegt werden.

Mit csv wird es denke ich nicht möglich sein.

    $Server = "10.10.10.1"  

    $gruppen = @("test")  

    $date = (Get-date(Get-Date)  -Format "dd-MM-yyyy HH:mm:ss")  
    $AD_Domain = "test"  
    $AD-User = "test"  

    $AD_Domain_User = $AD_Domain + $AD_User

    $securepass = gc "D:\test.txt" | convertto-SecureString   

    ## $cred = New-Object PSCredential $AD_User, $securepass 

    $cred = New-Object System.Management.Automation.PSCredential($AD_Domain_User, $securepass) 

    $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)

    $count = 0
    $daten = @()

    foreach($group in $gruppen){ 

            $all = @()  
            $all += Get-ADGroupMember $group -Recursive -Server $Server -Credential $cred -EA SilentlyContinue 
            $all += Get-ADGroupMember $group -Server $Server -Credential $cred -EA SilentlyContinue | ?{$_.objectClass -eq "group"} | Get-ADGroupMember -Recursive  
            #$all = $all | Where{ $_.SamAccountName -eq "mpauluth" }   
            
            $daten += $all.Count
            $daten += $all | Select-Object name

            $daten | convertto-html  > D:\data\HtmlReport.html
    }        


Das sind meine ersten Überlegungen, allerdings wird in die HTML-Datei die Anzahl der Nutzer nicht mit exportiert.
Außerdem weiß ich keine Lösung für das Logo...

Kann mir da von euch wer weiterhelfen?

VG

Content-ID: 278619

Url: https://administrator.de/forum/ad-user-auslesen-und-in-datei-mit-logo-abspeichern-278619.html

Ausgedruckt am: 22.12.2024 um 17:12 Uhr

killtec
killtec 29.07.2015 um 15:27:25 Uhr
Goto Top
Hi,
wie wäre es, wenn du das als csv exportierst und das nachher via Makro in Exceleinlädst? Da hast du dann auch die Sache mit dem Logo face-smile

Gruß
makaroni
makaroni 29.07.2015 um 15:44:10 Uhr
Goto Top
Also das soll alles manuell via batch Datei für mehrere Domänen passieren. Wäre das damit auch umsetzbar? Mit Makros habe ich bis jetzt sehr wenig Berührung gehabt.. face-smile
killtec
killtec 29.07.2015 um 16:03:29 Uhr
Goto Top
Manuell ist ok -> Du brauchst ein Excel auf dem System, dann frühst du das in der jeweiligen Domain aus und startest via Excel ein Makro.

Gruß
AdminKnecht
Lösung AdminKnecht 29.07.2015 um 16:23:47 Uhr
Goto Top
Hallo makaroni,

probiere es mal mit diesem VB-Skipt, das liest dir aus einer AD-Datenbank eine bestimmte OU aus und erzeugt eine HTA-Datei (ähnlich einer HTM), dazu habe ich mir noch eingebaut, das nur Mitarbeiter einer bestimmten "Company" ausgelesen werden, passe das einfach für dich an:

In Zeile 67 packst du den Link zum Logo, in Zeile 87 die abzufragende OU, in Zeile 93 kannst du ggfs. noch das Feld "Company" abfragen:

On Error Resume Next

Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objShell = CreateObject("WScript.Shell")  

'Zielfpfad + Datei  

htaFilePath = "c:\Mitarbeiterliste.hta"  

Set htmlFile = objFSO.CreateTextFile(htaFilePath, TRUE)				' neue HTA-Datei erstellen  

htmlfile.WriteLine("<HTML>")							' ...zeilenweise die HTA-Datei füllen  
htmlfile.WriteLine("<TITLE>Firma Roehrich und Soehne                    Mitarbeiter-Übersicht</TITLE>")  
htmlfile.WriteLine("<HEAD>")  
htmlfile.WriteLine("<HTA:APPLICATION")  
htmlfile.WriteLine("MAXIMIZEBUTTON=""no""")  
htmlfile.WriteLine("SINGLEINSTANCE=""yes"">")  
htmlfile.WriteLine("SYSMENU=""no"">")  


'Aufbau der Ausgabetabelle festelegen  

htmlfile.WriteLine("<STYLE type=""text/css"">")	  
htmlfile.WriteLine("")											  
htmlfile.WriteLine("#TABLE1")								'hier die Ausgabe der Daten formatieren  
htmlfile.WriteLine("{")  
htmlfile.WriteLine("	font-family: ""Arial"", ""Arial"", Sans-Serif;")  
htmlfile.WriteLine("	font-size: 12px;")			  
htmlfile.WriteLine("	background: #fff;")  
htmlfile.WriteLine("	margin: 25px;")  
htmlfile.WriteLine("	width: 95%;")  
htmlfile.WriteLine("	border-collapse: collapse;")  
htmlfile.WriteLine("	text-align: left;")  
htmlfile.WriteLine("}")  
htmlfile.WriteLine("#TABLE1 TH")							'Überschriften formatieren  
htmlfile.WriteLine("{")  
htmlfile.WriteLine("	font-size: 13px;")  
htmlfile.WriteLine("	font-weight: normal;")  
htmlfile.WriteLine("	color: #600;")	  
htmlfile.WriteLine("	background: #ccc;")						'Hintergrund leicht grau  
htmlfile.WriteLine("	padding: 10px 8px;")  
htmlfile.WriteLine("	border-bottom: 2px solid #6678b1;")  
htmlfile.WriteLine("}")  
htmlfile.WriteLine("#TABLE1 TD")							'Datenbereich formatieren  
htmlfile.WriteLine("{")  
htmlfile.WriteLine("	border-bottom: 1px solid #ccc;")  
htmlfile.WriteLine("	color: #000;")  
htmlfile.WriteLine("	padding: 6px 8px;")  
htmlfile.WriteLine("}")  
htmlfile.WriteLine("</STYLE>")  


'Grösse des Anzeigefensters festlegen  

htmlfile.WriteLine("<SCRIPT Language=""VBScript"">")  
htmlfile.WriteLine("	 Sub Window_Onload")  
htmlfile.WriteLine("		window.resizeTo 1500,900")			' windows-größe einstellen  
htmlfile.WriteLine("	 End Sub")  
htmlfile.WriteLine("</SCRIPT>")  

'Fenster füllen  

htmlfile.WriteLine("</HEAD>")  
htmlfile.WriteLine("")  
htmlfile.WriteLine("<BODY><RIGHT>")  
htmlfile.WriteLine("<img src=""https://www.bsi.bund.de/SiteGlobals/StyleBundles/Bilder/Farbschema_A/logo_a.gif;jsessionid=6457A952E4DA59827FC1A1934FBB6076.2_cid368?__blob=normal&v=2"">")  
htmlfile.WriteLine("<CENTER>")  
htmlfile.WriteLine("<H2 style=""font-family: Arial; color: #600""><b>Mitarbeiter-Übersicht&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Stand "& FormatDateTime(date(),1) & " um " & FormatDateTime(time(),4) & " Uhr&#160;&#160;&#160;&#160&#160Quelle: ActiveDirectory-DB'</b></H2>")  
htmlfile.WriteLine("<TABLE id=""table1"" border=""0""><TBODY>")  
htmlfile.WriteLine("<THEAD>")  
htmlfile.WriteLine("	<TR>")  
htmlfile.WriteLine("		<TH>Initialen</TH>")  
htmlfile.WriteLine("		<TH>Name</TH>")	  
htmlfile.WriteLine("		<TH>Abteilung</TH>")  
htmlfile.WriteLine("		<TH>Büro</TH>")  
htmlfile.WriteLine("		<TH>PLZ</TH>")  
htmlfile.WriteLine("		<TH>Ort</TH>")  
htmlfile.WriteLine("		<TH>Bundesland</TH>")  
htmlfile.WriteLine("		<TH>Telefon</TH>")  
htmlfile.WriteLine("		<TH>Mobilfunk</TH>")  
htmlfile.WriteLine("		</TR>")  
htmlfile.WriteLine("</THEAD>")  
htmlfile.WriteLine("")  
htmlfile.WriteLine("<TBODY>")  

Set objContainer = GetObject("LDAP://ou=benutzer,dc=roehrich,dc=ads")	' welche OU?  
objContainer.Filter = Array("user")  



For Each objChild In objContainer
		If objChild.company = "Roehrich GmbH" Then		' nur die mit company = "Roehrich GmbH"  
		htmlfile.WriteLine("<TR>")  
		htmlfile.WriteLine("	<TD>" & objChild.initials & "</TD>")			' Initialen  
		htmlfile.WriteLine("	<TD>" & objChild.displayname & "</TD>")			' Anzeigename Mustermann, Max  
		htmlfile.WriteLine("	<TD>" & objChild.department & "</TD>")			' Abteilung  
		htmlfile.WriteLine("	<TD>" & objChild.physicalDeliveryOfficeName & "</TD>")	' Büro  
		htmlfile.WriteLine("	<TD>" & objChild.postalcode & "</TD>")			' PLZ  
		htmlfile.WriteLine("	<TD>" & objChild.l & "</TD>")				' Ort = Location  
		htmlfile.WriteLine("	<TD>" & objChild.st & "</TD>")				' Bundesland = state  
		htmlfile.WriteLine("	<TD>" & objChild.telephonenumber & "</TD>")		' Telefon  
		htmlfile.WriteLine("	<TD>" & objChild.mobile & "</TD>")			' Mobilfunk  
		htmlfile.WriteLine("</TR>")  
		End If
Next

htmlfile.WriteLine("</TBODY>")  
htmlfile.WriteLine("</TABLE>")  
htmlfile.WriteLine("</CENTER>")  
htmlfile.WriteLine("")  
htmlfile.WriteLine("</BODY></HTML>")  

'objShell.Run htaFilePath	'HTA Datei ausgeben  


set objFSO = Nothing		
set objShell = Nothing
set objContainer = Nothing

Natürlich muss das Konto, unter dem du das Skript ausführst, auch entsprechende Berechtigungen haben face-smile

Das ganze packst du in eine BAT und taksplanst das:

C:\Windows\System32\cscript "c:\Mitarbeiterliste.vbs"  

Schöne Grüße

Marcus
makaroni
makaroni 29.07.2015 um 16:46:47 Uhr
Goto Top
Hey Marcus,

danke für deine ausführliche Antwort. Es ist allerdings vorgesehen, dass dieses via Powershell umgesetzt werden soll.
Trotzdem vielen Dank
makaroni
makaroni 29.07.2015 um 16:47:15 Uhr
Goto Top
Oh pardon, ich meinte natürlich automatisch, jeden 1. Tag im Monat ...
colinardo
Lösung colinardo 29.07.2015, aktualisiert am 19.08.2015 um 09:00:19 Uhr
Goto Top
Aha, gibt wieder mal Makaroni face-smile

Ich liefere den Emmentaler dazu ;-P

Im Beispiel wird das Logo als Base64 String direkt in die HTML-Datei eingebettet, man kann natürlich auch einen festen Pfad nehmen und das Bild verlinken, wie man es halt benötigt... Oder man schickt das ganze hinterher an einen PDF-Printer, jedem wie er es mag..

Ich habe deinen Code aufgegriffen und entsprechend ergänzt...
$Server = "10.10.10.1"   
$gruppen = @('Gruppe1','Gruppe2')  
$AD_Domain = "test"  
$AD_User = "test"  

# Pfad zur Ausgabe HTML-Datei
$htmlfile = "D:\data\HtmlReport_$(get-date -F 'yyyyMMdd').html"  
# Pfad zum Logo
$logo = 'C:\data\Logo.jpg'  

$AD_Domain_User = $AD_Domain + $AD_User
$securepass = gc "D:\test.txt" | convertto-SecureString   
$cred = New-Object PSCredential($AD_Domain_User, $securepass) 
$date = get-date -F 'dd-MM-yyyy HH:mm:ss'  

# Bild zu Base64 Data konvertieren
$b64 = "data:image/$([System.IO.Path]::GetExtension($logo).substring(1));base64," + [convert]::ToBase64String((Get-Content $logo -Encoding byte))  
$all = @()

$gruppen | %{
    $mitglieder = @()
    $mitglieder += Get-AdGroupMember $_ -Recursive -Server $server -Credential $cred -EA SilentlyContinue
    $mitglieder += Get-ADGroupMember $_ -Server $Server -Credential $cred -EA SilentlyContinue | ?{$_.objectClass -eq "group"} | Get-ADGroupMember -Recursive   
    $mitglieder = $mitglieder | select -Unique
    $all += New-Object PSObject -Property @{Gruppe=$_;Mitglieder=$mitglieder}
}

$html = @"  
<!doctype html>
<html>
<head>
<meta charset="utf-8">  
<title>Berechtigungen</title>
<style type="text/css">  
body {
	font-family: Verdana, Geneva, sans-serif;
	font-size: 13px;
}
H1{font-size:1.8em}
table td {
	vertical-align:middle;	
}
th {
	text-align: left;
	background-color: #666;
	color: white;
	height: 20px;
	padding: 5px;
}
tr.bodyrow td{
	height: 20px;
	border-bottom-width: 1px;
	border-bottom-style: dashed;
	border-bottom-color: #CCC;
}
tr.grouprow td {
	height: 20px;
	border-bottom-width: 1px;
	border-bottom-style: dashed;
	border-bottom-color: #CCC;
	background-color: #96B0F5;
	padding: 2px;
	font-weight: bold;
	color: #333;
}
</style>
</head>

<body>
<img src="$b64"/>  
<h1>Übersicht der Gruppenmitglieder</h1>
<p>
$date
</p>
<table width="100%" border="0" cellspacing="0" cellpadding="0">  
  <tr>
    <th>Name</th>
    <th>SamAccountName</th>
    <th>SID</th>
  </tr>
  $($all | %{
@"  
<tr class="grouprow">  
    <td colspan="5">$($_.Gruppe) / ( $($_.Mitglieder.length) Mitglieder)</td>  
</tr>
"@  
$($_.Mitglieder | %{
@"  
<tr class="bodyrow">  
    <td>$($_.Name)</td>
    <td>$($_.SamAccountName)</td>
    <td>$($_.SID)</td>
</tr>
"@  
})
})
</table>
<p>
<strong>Gesamtanzahl der User aus allen Gruppen:</strong> $($all.Mitglieder.Length)
</p>
</body>
</html>
"@ | out-file $htmlfile -Encoding UTF8  
# HTML File aufrufen
start-process $htmlfile
Eine Beispielhafte Ausgabe sieht dann so aus:

5d444259ece092948f81ace732a78a3a

dem kreativen Gemüt sind bei der Gestaltung natürlich keine Grenzen gesetzt.

Als denn gutes Gelingen.
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
AdminKnecht
AdminKnecht 30.07.2015 um 12:52:46 Uhr
Goto Top
Super Uwe!

In der Powershell bin ich jetzt noch nicht soooooo firm, deswegen 2 Fragen dazu:

- wie bekomme ich die Namensliste alphabetisch sortiert?
- wie bekomme ich weitere AD-Attribute ausgegeben, z.B. POSTALCODE, L und DEPARTMENT etc.? Wenn ich das cmdlet get-adgroupmember benutze, bekomme ich ja nur 6 Attribute zurück...

Schöne Grüße

MArcus
colinardo
Lösung colinardo 30.07.2015 aktualisiert um 16:21:32 Uhr
Goto Top
Hallo Marcus,
- wie bekomme ich die Namensliste alphabetisch sortiert?
Zeile 87 so umschreiben:
$($_.Mitglieder | sort Name | %{ 
wie bekomme ich weitere AD-Attribute ausgegeben
Mit (get-aduser USERNAME -Properties *) kommst du an alle Attribute eines Users, diese kannst du dann dem Objekt hinzufügen und in neuen Spalten im HTML-Code ausgeben.

Mach dir später noch ein Beispiel dazu wenn du nicht zurecht kommst ...

-edit- hier das Update das mit den Variablen im oberen Teil gesteuert werden kann:
# Pfad zur Ausgabe HTML-Datei
$htmlfile = "D:\data\HtmlReport_$(get-date -F 'yyyyMMdd').html"  
# Pfad zum Logo
$logo = 'C:\Logo.jpg'  

# Gruppen festlegen dessen Mitglieder ausgeben werden sollen
$gruppen = @(
    'Gruppe1'  
    'Gruppe2'  
)
# Zusätzliche AD-Eigenschaften des Users definieren welche ausgelesen werden sollen
$additionalProperties = @(
    'Department'  
    'PostalCode'  
)
# Alle endgültigen Eigenschaften für die Tabelle festlegen
$columns = @(
    'Name'  
    'SamAccountName'  
    'SID'  
    'Department'  
    'PostalCode'  
    'HomePage'  
)
# ----------------------

# Bild zu Base64 Data konvertieren
$b64 = "data:image/$([System.IO.Path]::GetExtension($logo).substring(1));base64," + [convert]::ToBase64String((Get-Content $logo -Encoding byte))  
$date = get-date -F 'dd-MM-yyyy HH:mm:ss'  
$all = @()

$gruppen | %{
    #Gruppenmitglieder rekursiv auslesen
    $mitglieder = @()
    $mitglieder += Get-AdGroupMember $_ -Recursive
    # Fix um Gruppenmitglieder der Standard Domaingruppen zu erfassen
    $mitglieder += Get-ADGroupMember $_ -EA SilentlyContinue | ?{$_.objectClass -eq "group"} | Get-ADGroupMember -Recursive  
    # Felder der weiteren Eigenschaften anlegen
    $additionalProperties | %{Add-Member -InputObject $mitglieder -MemberType NoteProperty -Name $_ -Value ''}  
    foreach($member in $mitglieder){
        $props = get-aduser $member.SamAccountName -Properties $additionalProperties | select $additionalProperties
        $additionalProperties |%{$member.($_) = $props.($_)}
    }
    $mitglieder = $mitglieder | sort Name | select -Unique
    $all += New-Object PSObject -Property @{Gruppe=$_;Mitglieder=$mitglieder}
}

$html = @"  
<!doctype html>
<html>
<head>
<meta charset="utf-8">  
<title>Berechtigungen</title>
<style type="text/css">  
body {
	font-family: Verdana, Geneva, sans-serif;
	font-size: 13px;
}
H1{font-size:1.8em}
table td {
	vertical-align:middle;	
}
th {
	text-align: left;
	background-color: #666;
	color: white;
	height: 20px;
	padding: 5px;
}
tr.bodyrow td{
	height: 20px;
	border-bottom-width: 1px;
	border-bottom-style: dashed;
	border-bottom-color: #CCC;
}
tr.grouprow td {
	height: 20px;
	border-bottom-width: 1px;
	border-bottom-style: dashed;
	border-bottom-color: #CCC;
	background-color: #96B0F5;
	padding: 2px;
	font-weight: bold;
	color: #333;
}
</style>
</head>

<body>
<img src="$b64"/>  
<h1>Übersicht der Gruppenmitglieder</h1>
<p>
$date
</p>
<table width="100%" border="0" cellspacing="0" cellpadding="0">  
  <tr>
    $($columns |%{
    "<th>$_</th>"  
    })
  </tr>
  $($all | %{
@"  
<tr class="grouprow">  
    <td colspan="$($columns.length)">$($_.Gruppe) / ( $($_.Mitglieder.length) Mitglieder)</td>  
</tr>
"@  
$($_.Mitglieder | %{
$m = $_
@"  
<tr class="bodyrow">  
    $($columns | %{
        "<td>$($m.$_)</td>"  
    })
</tr>
"@  
})
})
</table>
<p>
<strong>Gesamtanzahl der User aus allen Gruppen:</strong> $($all.Mitglieder.Length)
</p>
</body>
</html>
"@ | out-file $htmlfile -Encoding UTF8  
start-process $htmlfile
Grüße Uwe
AdminKnecht
AdminKnecht 31.07.2015 um 13:21:46 Uhr
Goto Top
..danke dir, Uwe! Ich versuche das mal auf die Reihe zu kriegen ... face-smile

Du hast nun keine "Credentials" mehr benutzt für die Abfragen?

Schönes Wochenende,

Marcus
colinardo
colinardo 31.07.2015 aktualisiert um 13:26:38 Uhr
Goto Top
Zitat von @AdminKnecht:
Du hast nun keine "Credentials" mehr benutzt für die Abfragen?
Nein, habe das hier nur lokal getestet, deswegen, aber kannst du ja einfach wieder einbauen.

Ebenfalls ein schönes Wochenende
Grüße Uwe
makaroni
makaroni 19.08.2015 um 09:07:53 Uhr
Goto Top
Sehr geil Uwe, habe es gerade Mal getestet und es sieht super aus.
Vielen Dank face-smile

Eine Frage habe ich nun noch. Mehrere Benutzer sind in mehreren Gruppen enthalten. Soweit auch alles gut. Wie bekomme ich es allerdings hin, die Gesamtanzahl der Nutzer als -unique zu bekommen? Sprich ich benötige alle Gruppen mit allen Usern, das klappt ja schon und zum Schluss bei "Gesamtanzahl der User aus allen Gruppen: " die Anzahl der Nutzer ohne doppelte Gruppenzugehörigkeit.

Sprich Beispiel:

Gruppr A:

Test1
Test2
Test3

Gruppe B:
Test2
Test4

Gesamtanzahl der User aus allen Gruppen: 3
Also Test 2 soll nur einmal mitgezählt werden.

Wie kann ich das umsetzen?
colinardo
colinardo 19.08.2015 um 09:30:03 Uhr
Goto Top
Hallo Makaroni,
das wird im zweiten Skript bereits in Zeile 44 gemacht:
$mitglieder = $mitglieder | sort Name | select -Unique 
Grüße Uwe
makaroni
makaroni 19.08.2015 um 10:27:31 Uhr
Goto Top
Ja das hatte ich gesehen, es scheint aber nicht zu funktionieren. Die Gesamtanzahl beträgt ALLE Nutzer, die in den Gruppen sind, also auch doppelte werden mitgezählt. Ich verstehe ja, dass das Script nicht weiß, aus welcher Gruppe er die bereits vorhandenen User entfernen soll (für die Auflistung) , nur bei der Gesamtanzahl müsste ja eigentlich dann das unique greifen oder?!
colinardo
colinardo 19.08.2015 aktualisiert um 10:54:21 Uhr
Goto Top
Dann gebe mal explizit die Eigenschaft an welche unique sein soll, also
select SamAccountname -Unique
Das sollte auf jeden Fall auch bei dir problemlos laufen...was es hier auch zuverlässig tut ...
makaroni
makaroni 21.08.2015 um 09:48:46 Uhr
Goto Top
Leider nein face-sad

Habe es nochmal explizit mit Testgruppen getestet:

Gruppe1:
User 1
User 2

Gruppe2:
User 2

Gesamtanzahl der User aus allen Gruppen 3

Also eine Person zu viel.
makaroni
makaroni 21.08.2015 um 11:57:55 Uhr
Goto Top
So hat geklappt, ist klar dass das Unique nicht funktioniert hat. Er hat es ja nur auf die Gruppen angewandt.
Habe nun noch eine neue Variable in der Schleife der Gruppenmitglieder erstellt, die alle Mitglieder erhält, nicht nach Gruppen sortiert. und darauf dann ein Unique ausgeführt. Nun gehts face-smile Dankt Euch face-smile
colinardo
colinardo 21.08.2015 aktualisiert um 13:05:08 Uhr
Goto Top
So hat geklappt, ist klar dass das Unique nicht funktioniert hat. Er hat es ja nur auf die Gruppen angewandt.
Dann hast du es an der falschen Stelle angewandt, vermutlich auf $all, da wäre das klar.
Aber für die Gesamtanzahl der User kannst du auch folgendes hernehmen:
($all.mitglieder.SamAccountName | select -Unique).Length
makaroni
makaroni 04.09.2015 um 10:52:35 Uhr
Goto Top
Hey Uwe,

ich hätte noch, für dich bestimmt eine sehr einfache, Frage. Ich möchte mit dem bereits oben genannten Skript, nun alle User auslesen, die NICHT deaktiviert sind.
Was muss ich da "kleines" noch hinzufügen? Mit Get-ADGroupmember bekomme ich es denke ich nicht hin. Wahrscheinlich muss ich Get-ADGroup einbinden.
Viele Grüße und vielen Dank schon einmal face-smile

Die Nudel
colinardo
colinardo 04.09.2015 aktualisiert um 11:25:53 Uhr
Goto Top
Moin again du Nudel face-wink,
dafür fügst du einfach im zweiten Skript noch der Variablen $aditionalProperties die Eigenschaft Enabled hinzu. Diese sagt aus ob ein Benutzeraccount aktiviert oder deaktiviert ist ($true / $false)

$additionalProperties = @(
    'Department'  
    'PostalCode'  
    'Enabled'  
)
Dann filterst du die User einfach am Schluss bevor sie zur Variablen $all hinzugefügt werden noch zusätzlich mit
$mitglieder = $mitglieder | ?{$_.Enabled -eq $true} | sort Name | select -Unique
Fertig.

Grüße Uwe
makaroni
makaroni 04.09.2015 um 16:01:01 Uhr
Goto Top
Danke Uwe ;)

es workt face-smile

Schönes Wochenende
colinardo
colinardo 04.09.2015 aktualisiert um 16:07:07 Uhr
Goto Top
Zitat von @makaroni:
es workt face-smile
Schön face-smile
Schönes Wochenende
Wünsche ich dir ebenfalls.
makaroni
makaroni 21.09.2015 um 16:17:36 Uhr
Goto Top
Hey ho zusammen,

wie behandel ich den Sonderfall, wenn es im AD Vertrauensstellungen zu anderen AD Controllern gibt und sich in einer Gruppe der Domäne (contoso.com) eine weitere Gruppe befindet, die in einer anderen Domäne (contoso1.com) bzw. Unterdomäne (demo.contoso.com) verwendet wird. Im Grunde könnte ich mir in den anderen Domänen den identischen User mit dem gleichen Passwort anlegen. Was ich allerdings als sehr unschöne und statische Methode sehe. Mein Powershellscript wirft mir dann den Berechtigungsfehler:

Get-ADGroupMember : An operations error occurred
At D:\test.ps1:38 char:20
+     $mitglieder += Get-ADGroupMember $_ -Server $Server -Credential $cred -EA Si ...
+                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Internet-Basis:ADGroup) [Get-ADGroupMember], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8224,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember

Hat jemand eine Idee?
colinardo
colinardo 21.09.2015 aktualisiert um 16:24:08 Uhr
Goto Top
Einen Admin nehmen der in "beiden" Domains über genügend Rechte verfügt.
makaroni
makaroni 08.10.2015 um 10:30:25 Uhr
Goto Top
Hey Uwe,

für Get-ADuser gibt es keine Properties, die anzeigen lassen, ob ein Account abgelaufen ist. Bislang lese ich ja nur die Accounts aus, die enabled sind. Allerdings sind auch Accounts enabled, die bereits abgelaufen sind. Diese Accounts möchte ich allerdings auch nicht in der Liste haben.

Ich kenne nur für Search-ADAccount das AccountExpiring Propertie.

Wie kann ich das denn in unser tolles Script noch mit einbauen, dass wirklich nur die Nutzer angezeigt werden, die sich ans System anmelden können?

Und sorry für meine viele Fragerei, ich bin auf einem guten Weg, das vllt irgendwann mal selber hinzubekommen.
colinardo
Lösung colinardo 08.10.2015, aktualisiert am 20.10.2015 um 10:59:39 Uhr
Goto Top
für Get-ADuser gibt es keine Properties, die anzeigen lassen, ob ein Account abgelaufen ist.
Doch die Eigenschaft gibt es..., lautet AccountExpirationDate
Beispiel
get-aduser -Filter * -Properties AccountExpirationDate | ?{$_.Enabled -and ($_.AccountExpirationDate -eq $null -or $_.AccountExpirationDate -gt (get-date))}
Grüße Uwe
makaroni
makaroni 20.10.2015 um 11:15:50 Uhr
Goto Top
ich habe immer neue Probleme face-smile

So kurz zur Sache:

Rootdomain: test.de
Subdomain: info.test.de

Eine universelle Gruppe:
test.de\Mitglied1
info.test.de\Sicherheitsgruppe

Nun möchte ich mit dem bereits hier "erarbeiteten" Skript, nur die User aus der Gruppe auslesen OHNE Recursive.
Also nur den user test.de\Mitglied1
Ausgelesen werden soll mit einem User nur mit Domänen User Berechtigungen aus der Rootdomain.
Trotz, dass ich die Gruppe nicht Recursive auslesen lasse, kommt der Credential error.

1. Frage: Müssen Universelle Gruppen anders ausgelesen werden als globale oder locale?
2. Frage: Überprüft das Skript trotzdem, obwohl ich nicht recursive auslesen lasse, die Credentials des Ordners?
3. Frage: Wie kann ich es umsetzen, ohne den Fehler zu bekommen und ohne dem Benutzer Enterprise Admin Rechte zu geben?

Viele Grüße und vielen Dank schon einmal face-smile
makaroni
makaroni 22.10.2015 um 08:10:32 Uhr
Goto Top
Alternativ gibt es eine Möglichkeit, mit einem identisch heißenden Benutzer sowie dem identischen Passwort in jeder Subdomain, das Script mit mehreren Credentials so anzupassen, dass aus allen Domains die Daten ausgelesen werden?
Ein Benutzer mit übergreifenden Berechtigungen der allerdings nur Domain User sein soll ist meines Wissens so nicht umsetzbar.

Ziel:
- Entweder für jede Domain bzw. Subdomain eine Auswertung (Problem Credentials s.o.)
- Oder eine Auswertung zusammen (ggf. mehrere Credentials, nur wie?)
makaroni
makaroni 28.10.2015 um 09:33:26 Uhr
Goto Top
Irgendwie lässt es mich die Gruppen ohne Recursion trotzdem nicht auslesen. Ich habe nun bzgl. meines Wissenstandes fast alles versucht. Hat keiner eine Idee wie ich das hinbekommen könnte?
patrickebert
patrickebert 20.07.2016 aktualisiert um 08:05:22 Uhr
Goto Top
Klasse Script @colinardo

Spende folgt :D

Gibt es denn soetwas auch als Computerabfrage mit jeweiligen installierten Programmen?
colinardo
colinardo 20.07.2016 aktualisiert um 15:13:10 Uhr
Goto Top
Zitat von @patrickebert:
Klasse Script @colinardo
Bitte face-smile
Spende folgt :D
Danke Dir face-smile Das gibt extra Kugeln beim Italiener...
Gibt es denn soetwas auch als Computerabfrage mit jeweiligen installierten Programmen?
Kann man selbstverständlich auch machen, aber das gehört ja nicht in diesen Thread.

Grüße Uwe