Skrypt wyszukujacy ostatnio dodane do AD serwery, tworzcy grupy security na bazie ich nazw i dodajacy te grupy do konkretnego GPO do lokalnych adminów

0

Cześć,
To mój pierwszy watek więc witam wszystkich.
Pracuję nad skryptem, który wyszukuje w AD serwery ostatnio dodane (30 dni) i na bazie ich nazwy tworzy po dwie grupy security:

  • z przedrostkiem GPGR każda
  • Z przyrostkiem _Adm i RDP
    w postaci GPGR_nazwaserwera_Adm i GPGR_nazwaservera_RDP i dodaje do konkretnego GPO (juz istniejacego) nazwaservera_Server_Admin do grupy administrators i Remote Desktop Users konkretne zgodnie z nazwami. Jestem na etapie poniżej:
    '''
    $recently = [DateTime]::Today.AddDays(-30)
    $filepath = "C:\newADServers.csv"
    $GPGR = "GPGR
    "
    $Adm = "_Adm"
    $RDP = "RDP"

Get-ADComputer -filter 'WhenCreated -ge $recently' -Properties Name, whenCreated | select Name, whenCreated | Export-csv $filepath
$servers = Import-CSV $filepath
Foreach ($server in $servers) {

$srvName = $_.Name 
$GroupName = -join($GPGR,$srvName,$Adm) 
New-ADGroup -Name $GroupName -SamAccountName $GroupName -GroupCategory Security -GroupScope Global -Path "OU=Central, DC=qa, DC=ILF, DC=COM"

}
'''powershell

Bede bardzo wdzieczny madrzejszym za pomoc. Utknalem na tym etapie - teraz tworzy mi jedna grupe w postaci GPGR__Adm

0

Zaobacz jak zachowuje się poniższe. Podejrzewam, że nie wczytują się nazwy serwerów z pliku.

$recently = ([datetime]::Today.AddDays(-30))
$Servers = Get-ADComputer -Filter 'whenCreated -ge $recently -and OperatingSystem -like "Windows Server*"' -Properties whenCreated, OperatingSystem | Select Name, OperatingSystem, whenCreated


foreach ($Server in $Servers) {
    $GroupName = -join("GPGR_", $Server.Name, "_Adm")
    New-ADGroup-Name $GroupName -SamAccountName $GroupName -GroupCategory Security -GroupScope Global -Path "OU=Central, DC=qa, DC=ILF, DC=COM" -WhatIf 
}

--
Paweł

Edit:
A co z serwerami, dla których grupy bezpieczeństwa zostały już stworzone? Jak będziesz je wyłączał z procesu?

0

Dziękuję. Będę brał pod uwagę tylko ostatnie siedem dni i dodane do domeny serwery w tym okresie. Udało mi się już dotrzeć do momentu, w którym importuję listę serverow z pliku i buduję grupy, wrzucam je do tablicy i listuję. Wyglada ok. Jednak jak próbuję wyeksportować do pliku csv to wyrzuca mi coś w stylu poniżej zamiast nazw grup. Listuje normalnie na ekranie a przy eksporcie mamy to co poniżej. Pod spodem to co mam na teraz w skrypcie. Nastepnym krokiem bedzie dodanie do konkretnego gpo i item level targetting na konkretny server

#TYPE System.String
"Length"
"13"
"18"
"20"
"22"
"29"
"21"
$recently = [DateTime]::Today.AddDays(-30) 
$filepath = "C:\newADServers.csv"
$GPGR = "GPGR_"
$Adm = "_Adm"
$RDP = "_RDP"

Get-ADComputer -filter 'WhenCreated -ge $recently -and OperatingSystem -Like "Windows *Server*"' -Properties * | Format-Table Name, whenCreated -Autosize -Wrap | Export-csv $filepath


$Target= @()
		$servers | ForEach-Object {
        
		foreach ($server in $_.PSObject.Properties) 
	{
		#-join ($GPGR,$server.Value,$Adm)
		$TargetProperties = @{Name=-join ($GPGR,$server.Value,$Adm)}
		$TargetObject = New-Object PSObject –Property $TargetProperties
		
		$Target += -join ($GPGR,$server.Value,$Adm)	
		$Target += -join ($GPGR,$server.Value,$RDP)
}
	
    }
	
	$Target | Export-csv C:\newADGroups
0

spróbuj dołączyć poniższy kod:

$Servers |
        Select Name, OperatingSystem, whenCreated | 
            Export-Csv -Delimiter ";" -Path $filepath -Encoding UTF8 -NoTypeInformation

jeśli chcesz zaimportować dane z CSV to kod załączam poniżej:

$Servers = Import-Csv -Delimiter ";" -Encoding UTF8 -Path $filepath 
0

Myślałem, że skorzystasz z szablonu i dalej już sobie poradzisz.

$Target |
    Select @{n="Value"; e={$_.ToString()}} | 
        Export-Csv -Delimiter ";" -Path $filepath -Encoding UTF8 -NoTypeInformation
0

		$Target += -join ($GPGR,$server.Value,$Adm)	
		$Target += -join ($GPGR,$server.Value,$RDP)

Jeszcze tu powyżej pobierasz właściwość Value z obiektu $server, której to właściwości obiekt nie posiada. Pewnie miałeś na myśli Name.

0

Idealnie! Dziekuję pięknie. Teraz musze te konkretne grupy przypisać do jednego GPO zeby sie wrzucaly do lokalnych adminow i lokalnych remote desktop users z item targetingiem wedlug wzoru przez item level targetting:

GPGR_test1_Adm => do adminow na serverze test1
GPGR_test2_Adm => do adminow na serverze test2

GPGR_test1_RDP => do rdp na serverze test1
GR_test2_RDP => do rdp na serverze test2

1 użytkowników online, w tym zalogowanych: 0, gości: 1