Quantcast
Channel: Windows PowerShell Forum
Viewing all articles
Browse latest Browse all 2314

Auslesen des AD/LDIFDE + suchen über zwei Zeilen mit zwei Strings

$
0
0

Moin moin,

Ich hab hier ein Problem, das besteht nun schon seit dem 11.07 und bekomme es nun nicht mehr alleine gelöst.

#$TargetFolder = ".\Notes"
#$SourceFolder = ".\"
#$Extension = "*.id"

#ForEach ($File in Get-Childitem $SourceFolder -Include $Extension -Recurse -name) { #Für jede ID die im SourceFolder liegt wird die Schleife
		#Write-Host "Kopiere ID $File"
		#Copy-Item $TargetFolder -Recurse .\Notes.$file
		#Move-Item .\$file .\Notes.$file\Data
		#(Get-Content .\Notes.$file\Data\setup.txt) | Foreach-Object {$_ -replace 'name.id', $file} | Set-Content .\Notes.$file\Data\setup.txt
		#Get-ChildItem .\Notes.$file\Data\$file | Get-Content | Foreach-Object {If ($_ -match 'cn=([^"]+)/O=Dfd-hamburg') {		
		#$a = $Matches[1]
		#}}
		#pause
		#(Get-Content .\Notes.$file\Data\setup.txt) | Foreach-Object {$_ -replace 'Vorname Nachname', $Matches[1]} | Set-Content .\Notes.$file\Data\setup.txt
#	}#Foreach
#Write-Host "Fertig!"
$a = "Jannis Kroeger"
#Ldifde -f C:\TEMP\eos.ldf -r "(objectClass=User)" -l "cn,givenname,sn,homeDirectory" -s eos.lcl -t 389 #Holt aus dem AD alle Nutzer ab
#$AD = Get-Content C:\TEMP\eos.ldf #Ließt alle Daten aus der ebend erstellten Datei ein.
$array = $a -split "\s+" #Aufteilen des Vor- und Nachnamen
#$array[1] #Ausgabe des Nachnamen
#$array[0] #Ausgabe des Vornamen
#___________________________________________________________________________________________________________________________________________________________#
$Path = "C:\TEMP"                #Die Dateien in diesem Verzeichnis wird analysiert
$FileFilter = "*.txt"  			 #Hier können auch Platzhalter angegeben werden z.B. "File*.txt"
$SearchString = "$array[1]"  	 #Hier können reguläre Ausdrücke verwendet werden z.B. "E[q-s]ror: 225"
$SearchString2 = "$array[0]"
$OutPutFile = "Result.log"
$Fullpath = "C:\TEMP\eos.txt"

Function Analyze{
 #param($Fullpath,$SearchString)#,$OutputFile,$SearchString,$Searchstring2)

 $LineNumber = 0
 $Hits=@()                   #Array mit den Zeilennummern, die den Searchtext enthalten
 
 "{0} {1}" -f $FullPath,[Environment]::NewLine #Dateiname über die Hits schreiben
 
 $Lines = @(Get-Content $Fullpath)  #Array mit allen Zeilen der Datei
 $Lines[-1] = "Dummy"                       #Vorgängerzeile der ersten TextZeile
 
 $Lines | ForEach{                     #Jede Zeile (=jedes Element des Arrays) untersuchen
   $LineNumber += 1                     #Zeilennummer
   If($_ -like $array[1]){         #Prüfen, ob $Suchstring in der Zeile enthalten ist
     $Hits += $LineNumber              #Füge die Zeilennummer dem Array Hits hinzu
   }#If
 }#Lines
 
$Lines | ForEach{                     #Jede Zeile (=jedes Element des Arrays) untersuchen
  $LineNumber += 1                     #Zeilennummer
  If($_ -like $array[0]){         #Prüfen, ob $Suchstring in der Zeile enthalten ist
    $Hits += $LineNumber              #Füge die Zeilennummer dem Array Hits hinzu
  }#If
}#Lines
 
 For($i=0; $i -le $Hits.Count; $i++){  #Alle Zeilennummern mit Hits hochzählen
  $Value = ""
  If($Hits[$i] -eq $($Hits[$i-1]+1)) #Wenn zwei Zeilennummern mit Hits aufeinander folgen
    {
    $Value += "Zeile {0}: {1} {2}" -f $Hits[$i-1],$Lines[$Hits[$i]-2],[Environment]::NewLine
    $Value += "Zeile {0}: {1} {2}" -f $Hits[$i],$Lines[$Hits[$i]-1],[Environment]::NewLine
    $Value        #Eventuell auskommentieren, wenn keine Bildschirmausgabe gewünscht ist
    Add-Content -Path $Path\$OutPutFile -Value $Value  #auskommentieren, wenn keine Fileausgabe gewünscht ist   
    Remove-Variable Value -EA 0  
    }#if
  }#for
 
}#function
$LogFiles = Get-ChildItem $Patch #-path $Path #-filter $FileFilter
$LogFiles | ForEach {
Analyze #-FullPath $_.FullName #-OutPutFile $OutPutfile -SearchString $SearchString,$Searchstring2 #Funktionsaufruf
}

Der Teil über dem laaaaangen Strich funktioniert tadellos!

Was möchte ich eigentlich erreichen? Ich möchte in erster Linie das HomeDir, dass bei den Usern angegeben ist in einer Variable haben um es später als Pfad nutzen zukönnen, damit das Ganze über dem Strich dort hin kopiert werden kann.

Der Accountname ist allerdings nicht so einfach ermittel bar und deshalb gehe ich hier solche Umwege über den Vor- und Nachnamen die allein schon ein Gefrikel waren herauszubekommen.

Dsquery und dsget hab ich mir mal angeguckt aber nie zum laufen bekommen, außerdem fände ich es sehr praktisch, wenn diejenigen die befugt sind dieses Skript zu starten, nicht auf die RSAT  angewiesen sind.

Habt ihr vielleicht Durchblick oder eine Idee?

KOMMENTAR: Wenn die erste Zeile gefunden wurde mit dem Nachnamen, muss die folgende Zeile mit dem Vornamen passen. In der darauf folgenden Zeile steht dann das HomeDir:

sn: Kroeger
givenName: Jannis
homeDirectory: \\XXXX02\wtshome$\KroegerJ




P.S.: Das Skript hört nicht auf zu laufen, mit folgender Ausgabe:

Kroeger
Jannis
C:\TEMP\eos.txt 

C:\TEMP\eos.txt 

C:\TEMP\eos.txt 

(...)

Danke

Jannis




Viewing all articles
Browse latest Browse all 2314


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>