harachte67
Goto Top

Automatisiert auf allen DCs NETLOGN auslesen und weg schreiben

Hallo zusammen!

Ich würde gerne mit dem Befehl "Get-ADDomainController" alle Domain Controller ausfindig machen, in eine Datei schreiben und danach über eine Schleife abrufen um die Ausgabe von GCI auf dem shared Folder NetLogon in eine Text Datei pipen. Bisher bin ich wie folgt vorgegangen:

Remove-Item C:\DC-List.txt -Force
Get-ADDomainController | select HostName | Out-File C:\DC-List.txt
$Server = Get-Content C:\DC-List.txt
foreach ($Machine in $Server)
{
GCI $Server\Netlogon | Export-Csv -Path C:\DC-List_Shared-Folder.csv -NoTypeInformation -NoClobber -Encoding UTF8 -Delimiter ";" -Append
}

Irgendwie hänge ich aber an der stelle wo der Server in das Text File geschrieben wird und das mit jede menge Leerzeichen. Desweiteren findet ewr das Share nicht wenn ich die Variable verwende für den Server.

Kann mir hier vielleicht jemand helfen.

(In Verwendung: Windows Server 2008 R2 Powershell v4)

Content-Key: 286481

Url: https://administrator.de/contentid/286481

Printed on: April 27, 2024 at 01:04 o'clock

Member: emeriks
emeriks Oct 23, 2015, updated at Oct 28, 2015 at 15:33:31 (UTC)
Goto Top
Hi,
Du brauchst das Netlogon aber nicht von jedem DC zu kopieren, sondern nur einmal pro Domäne. An die Domänennamen kommst Du am einfachsten mit
(Get-ADForest).Domains

ran.
Und mit
foreach($D in (Get-ADForest).Domains){GCI -path ('\\' + $D + '\NETLOGON' -recurse)  
bekommst Du den Inhalt der Netlogons aufgelistet.

E.
Member: jsysde
Solution jsysde Oct 24, 2015, updated at Oct 28, 2015 at 15:33:21 (UTC)
Goto Top
Moin.

Wie @emeriks schon schreibt, genügt es, auf einem beliebigen DC innerhalb der Domain ins NETLOGON-Share zu schreiben - das replizieren die DCs automatisch untereinander. Sollte also der Inhalt von NETLOGON auf deinen DCs voneinander abweichen, hast du definitiv ein (Replikations-)Problem!

Ergo nimmst du dir nur einen DC und schreibst dort ins NETLOGON, ohne Schleife und ohne eine Liste aller DCs zu verarbeiten.

Cheers,
jsysde
Member: Harachte67
Harachte67 Oct 28, 2015 at 15:29:30 (UTC)
Goto Top
Habe noch mal etwas, auf den Angaben bassierend gedattelt und dabei ist folgendes heraus gekommen:

###################### start of script ######################
$Date = Get-Date -UFormat "%m-%d-%Y"  
#### cache the DC server list
Get-ADDomainController -Filter * | Format-Table -Property Name -HideTableHeaders | Out-File 'C:\temp\DC-Server-List.csv'   
#### Provide the computer name in $ServerName variable
$file = 'C:\temp\DC-Server-List.csv'  
Get-Content $file  | Foreach {$_.TrimEnd()}  | Set-Content '$file.txt'  
$ServerName = Get-Content -Path 'C:\temp\DC-Server-List.csv.txt'  
##### Script Starts Here ######
foreach ($Server in $ServerName)
{
if (test-Connection -ComputerName $Server -Count 2 -Quiet)
{GCI -path ('\\' + $Server + '\Netlogon\<additional folder>') | Where-Object Name -EQ '<file name>' | Out-File -FilePath "C:\Temp\<file name> $Date.txt" -Append}  
else
{Write-Warning '$Server seems dead not pinging'}  
}
##### open the collected information
Invoke-Item "C:\Temp\<file name> $Date.txt"  
##### delte the dc server list
Remove-Item 'C:\temp\DC-Server-List.csv' -Force  
####################### end of script #######################
Mitglied: 122990
122990 Oct 28, 2015 updated at 15:49:59 (UTC)
Goto Top
Zitat von @Harachte67:

Habe noch mal etwas, auf den Angaben bassierend gedattelt und dabei ist folgendes heraus gekommen:
*Koppschüttel face-big-smile*
Wieso so umständlich? Das ist Powershell und kein Batch bei dem man alles erst in eine Textdatei schreibt face-big-smile...
Bei Powershell ist Piping angesagt ...
Get-ADDomainController -Filter * | %{
    if ((Test-Connection -ComputerName $_.Name -Count 2 -Quiet)){
        gci -path ('\\' + $_.Name + '\Netlogon\<additional folder>') | ?{!$_.PSIsContainer} | Out-File -FilePath "C:\Temp\<file name> $(Get-Date -UFormat "%m-%d-%Y").txt" -Append  
    }else{
        Write-Warning '$Server seems dead not pinging'  
    }
}
Der Sinn ist aber trotzdem noch fraglich ...

Gruß grexit