Jump to content

PowerShell Schleife läuft nicht mehrmals durch


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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 von Beginner18
Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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 von zahni
Link zu diesem Kommentar

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...

Link zu diesem Kommentar

...

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.

Link zu diesem Kommentar

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...

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...