Beginner18 0 Geschrieben 2. März 2017 Melden Teilen Geschrieben 2. März 2017 (bearbeitet) Moin, ich habe hier eine etwas längere aber auch für mich eine etwas aufwendigere Abfrage geschrieben. Die Daten funktionieren soweit, wie er sie mir ausgibt, aber er geht die Schleifen die ich unten eingegeben habe (Fett markierte Zeilen) jeweils nur einmal durch. Woran liegt das? Habe ich einen offensichtlichen Fehler gemacht beim Erstellen der Schleifen? function Get-ADUserLastLogon([string]$userName) { $dcs = Get-ADDomainController -Filter {Name -like "*"} #alle domaincontroller abfragen um die letzte anmeldung aller AD-User zu rthalten foreach($dc in $dcs) { $hostname = $dc.HostName $user = Get-ADUser $userName -Server $hostname -Properties lastLogon $lngexpires = $user.lastLogon if (-not ($lngexpires)) {$lngexpires = 0 } If (($lngexpires -eq 0) -or ($lngexpires -gt [DateTime]::MaxValue.Ticks)) { $LastLogon = "<Never>" } Else { $Date = [DateTime]$lngexpires $LastLogon = $Date.AddYears(1600).ToLocalTime() } } #alle AD-User abfragen und die gewünschten Properties auslesen und in eine csv Datei exportieren } cls $excel = New-Object -ComObject excel.application $excel.visible = $True $workbook = $excel.Workbooks.Add() #Genügend Mappen erzeugen $excel.DisplayAlerts = $False $sheet= $workbook.Worksheets.Item(1) cls #Role-HHLA-VMware-Administratoren #Tabelle benennen $sheet.Name = 'Administratoren' #Formatierung der Überschriften $sheet.Cells.Item(1,1).Font.Size = 10 $sheet.Cells.Item(1,1).Font.Italic=$True $sheet.Cells.Item(1,2).Font.Size = 10 $sheet.Cells.Item(1,2).Font.Italic=$True $sheet.Cells.Item(1,3).Font.Size = 10 $sheet.Cells.Item(1,3).Font.Italic=$True $sheet.Cells.Item(1,4).Font.Size = 10 $sheet.Cells.Item(1,4).Font.Italic=$True $sheet.Cells.Item(1,5).Font.Size = 10 $sheet.Cells.Item(1,5).Font.Italic=$True $sheet.Cells.Item(1,6).Font.Size = 10 $sheet.Cells.Item(1,6).Font.Italic=$True $sheet.Cells.Item(1,7).Font.Size = 10 $sheet.Cells.Item(1,7).Font.Italic=$True #Tabellenüberschriften setzen $sheet.Cells.Item(1,1) = 'Nachname' $sheet.Cells.Item(1,2) = 'Vorname' $sheet.Cells.Item(1,3) = 'Anzeigename' $sheet.Cells.Item(1,4) = 'Letztes Anmeldedatum' $sheet.Cells.Item(1,5) = 'Kontoablaufdatum' $sheet.Cells.Item(1,6) = 'Abteilung' $sheet.Cells.Item(1,7) = 'Kontoverzeichnis' cls Write-Host "+++ Auswertung von Role-HHLA-VMware-Administratoren wird erstellt..." -ForegroundColor Cyan $row = 2 #In welche Spalte sollen die Infos eingefügt werden $column = 1 foreach($samname in $infos){ $sheet.Cells.Item($row,$column) = $infos.samaccountname $column++ #Increment to next Row and reset Column $row++ $column = 1 } $row = 2 #In welche Spalte sollen die Infos eingefügt werden $column = 2 foreach($givenname in $infos){ $sheet.Cells.Item($row,$column) = $infos.GivenName $column++ #Increment to next Row and reset Column $row++ $column = 2 } $row = 2 #In welche Spalte sollen die Infos eingefügt werden $column = 3 foreach($name in $infos){ $sheet.Cells.Item($row,$column) = $infos.Name $column++ #Increment to next Row and reset Column $row++ $column = 3 } $row = 2 #In welche Spalte sollen die Infos eingefügt werden $column = 4 foreach($Lastlogon in $infos){ $sheet.Cells.Item($row,$column) = $infos.LastLogon $column++ #Increment to next Row and reset Column $row++ $column = 4 } $row = 2 #In welche Spalte sollen die Infos eingefügt werden $column = 5 foreach($accexpiration in $infos){ $sheet.Cells.Item($row,$column) = $infos.accountExpirationDate $column++ #Increment to next Row and reset Column $row++ $column = 5 } $row = 2 #In welche Spalte sollen die Infos eingefügt werden $column = 6 foreach($department in $infos){ $sheet.Cells.Item($row,$column) = $infos.Department $column++ #Increment to next Row and reset Column $row++ $column = 6 } $row = 2 #In welche Spalte sollen die Infos eingefügt werden $column = 7 foreach($distinguishedName in $infos){ $sheet.Cells.Item($row,$column) = $infos.DistinguishedName $column++ #Increment to next Row and reset Column $row++ $column = 7 } $alleADUser = Get-ADUser -Filter {enabled -eq $true} | sort foreach($user in $alleADUser) { Get-ADUserLastLogon $user.samaccountname $infos = Get-ADUser $user.samaccountname -Properties * $datum = $LastLogon $samname = $infos.samaccountname $givenname = $infos.GivenName $name = $infos.Name $accexpiration = $infos.accountExpirationDate $distinguishedName = $infos.distinguishedName $department = $infos.department } bearbeitet 2. März 2017 von Beginner18 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 2. März 2017 Melden Teilen Geschrieben 2. März 2017 Du würdest Dir selbst und uns allen einen riesen Gefallen tun, wenn Du den Code, den Du hier postest auch als Code formatierst und Deinen Code entsprechend korrekt einrückst. Du möchtest in Deinen Schleifen über eine Variable $Infos iterieren, hast diese Variable aber nirgendwo in dem Code, den Du gepostest hast, definiert oder gefüllt. Zitieren Link zu diesem Kommentar
Beginner18 0 Geschrieben 2. März 2017 Autor Melden Teilen Geschrieben 2. März 2017 I'm sorry, habe es aus PowerShell so kopiert und im Schreibeditor sah noch alles OK aus. $Infos habe ich in der 8. Zeile von unten definiert? Zumindest bin ich der Überzeugung das er so die Informationen aus $user.samaccountname bezieht. Wenn nicht dann korrigiert mich. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 2. März 2017 Melden Teilen Geschrieben 2. März 2017 Du kannst die Variable auf jeden Fall erst benutzen, wenn Du sie definiert/gefüllt hast. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 2. März 2017 Melden Teilen Geschrieben 2. März 2017 (bearbeitet) Nur mal kurz: Die 1. Function endet vor dem CLS, wenn ich das richtig sehe. Die wird unten erst unten aufgerufen (nach dem fetten Text) Danach kommt Code, der keine Schleife enthält, also nur 1x ausgeführt wird. Die Variablen dort werden aber erst hinterher definiert bzw. mit Daten befüllt (?). Der letzte Block "foreach($user in $alleADUser)" ist sinnfrei, da nur durch das Array alleADUser loopt und Inhalte in Variablen schreibt. Jeder Durchlauf überschreibt den vorigen Wert. Bitte beachten: Es kann gut sein, dass im Excel-Sheet eine Zeile steht. Weil in der Powershell-Shell noch die Variablen vom vorhergehen Versuch gespeichert sind... bearbeitet 2. März 2017 von zahni Zitieren Link zu diesem Kommentar
Beginner18 0 Geschrieben 3. März 2017 Autor Melden Teilen Geschrieben 3. März 2017 Ok Danke! Aber kannst du vielleicht noch ein bisschen genauer werden was das Ändern des Codes betrifft? Ich bin nämlich grad am Ende meines Wissens und wüsste nicht wie ich die Schleife umschreiben soll, damit sie immer wieder durchläuft. Gruß Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 3. März 2017 Melden Teilen Geschrieben 3. März 2017 Ich kenne mich mit dem Excel-Cmdlet nicht wirklich aus. Generell würde ich aber die Schleife foreach($user in $alleADUser) {Get-ADUserLastLogon $user.samaccountname$infos = Get-ADUser $user.samaccountname -Properties *$datum = $LastLogon$samname = $infos.samaccountname$givenname = $infos.GivenName$name = $infos.Name$accexpiration = $infos.accountExpirationDate$distinguishedName = $infos.distinguishedName$department = $infos.department} ein wenig erweitern... Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 3. März 2017 Melden Teilen Geschrieben 3. März 2017 ... Ich bin nämlich grad am Ende meines Wissens und wüsste nicht wie ich die Schleife umschreiben soll, damit sie immer wieder durchläuft. ... .... ohne Dir zu nahe treten zu wollen ... wie wär's wenn Du mit etwas anfängst, was Dich nicht überfordert? z.B. könnte ich mir vorstellen, dass es vermutlich erst mal einfacher wäre, die von Dir benötigten Daten zu ermitteln und sie in eine CSV-Datei zu exportieren. Powershell kann gut mit solchen strukturierten Daten umgehen und ein CSV-Export macht die Daten auch für Excel verwertbar. Zitieren Link zu diesem Kommentar
Beginner18 0 Geschrieben 3. März 2017 Autor Melden Teilen Geschrieben 3. März 2017 Mit einem normalen CSV-Export habe ich es auch hinbekommen. Jetzt wollte ich es direkt mit Formatierung in eine Excel Datei konvertieren und da habe ich jetzt mein Problem. Ich meinte das dieses Forum genau dafür ist? Um Fragen zu stellen und genau darauf eine Antwort oder eine Hilfestellung zu bekommen. Leider konnte ich durch Google, bei dem Thema, auch keine genaue Antwort finden. Wenn da jemand was weiß kann er es mir hier drunter schreiben oder wenn man es nicht weiß einfach weiterlesen... Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 3. März 2017 Melden Teilen Geschrieben 3. März 2017 Schau mal hier: https://www.amazon.de/PowerShell-Windows-Automation-f%C3%BCr-Einsteiger-Profis-ebook/dp/B01H5N4OTC/ref=sr_1_1?ie=UTF8&qid=1488540233&sr=8-1&keywords=powershell In einem Forum kann man leider nur bedingt Grundlagenwissen vermitteln. Und die Lösung für Dich fertigstellen wird Dir auch keiner. Einen Tipp hast Du ja schon bekommen. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 3. März 2017 Melden Teilen Geschrieben 3. März 2017 Ich meinte das dieses Forum genau dafür ist? Du solltest deine Ansprüche korrigieren. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 3. März 2017 Melden Teilen Geschrieben 3. März 2017 Es gibt viele Wege. Nils kennt da einen ganz alten: https://www.faq-o-matic.net/2003/10/25/csvde-zum-import-und-export-von-ad-daten-nutzen/ Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 3. März 2017 Melden Teilen Geschrieben 3. März 2017 OK ... dann solltest Du Dir das Leben einfacher machen!! :D :D Schau mal hier: https://blogs.technet.microsoft.com/heyscriptingguy/2015/11/25/introducing-the-powershell-excel-module-2/ Man muss das Rad ja nicht immer wieder neu erfinden. ;) :cool: :thumb1: Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 3. März 2017 Melden Teilen Geschrieben 3. März 2017 Ein Programmierer würde vermeiden den gleichen Code mehrmals zu verwenden. Um dies auch zu tun, alleine wegen der Fehleranfälligkeit von viel Code, deine Aufzählung der Rows in eine For-Schleife zu packen. Des Weiteren machst du über "Get-ADUserLastLogon $user.samaccountname" eine Abfrage, jedoch wird diese nicht in einer Variable gespeichert. Konzentriere dich bei der Ausgabe der Daten entweder auf den Host, Variablen oder eine Datei. Versuche dies aber nicht zu mischen. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.