Ayant régulièrement à construire rapidement des labs Windows Server sous Hyper-V, j’ai commencé à optimiser la popote pour gagner du temps et éviter les erreurs.

Si vous êtes dans le même cas que moi, je vous invite à regarder les points suivants:

  • Les disques de différenciation dans Hyper-V (Gain de temps, de place, de bande passante).
  • Powershell DSC (Ma prochaine étape).
  • Les scripts de remplissage (Ce dont on parle aujourd’hui).

Pour mes labs j’ai besoin de créer au niveau Active Directory:

  • Une structure d’OU
  • Des utilisateurs bidons*/**
  • De pré-créer mes serveurs et mes pc clients
  • De groupes pour l’administration des servers
  • D’un utilisateur à privilèges (rhubertyadm) ayant des droits sur tous les groupes « *admins »

* Pour la liste d’utilisateurs j’utilise https://fr.fakenamegenerator.com/order.php (il faut patienter pour recevoir la liste, pour 3.000 utilisateurs ça a pris ~1h avant d’avoir le mail).

** Le script comprend un système d’incrément pour les doublons

Le tout doit s’adapter automatiquement au domaine que j’ai créer préalablement.

Voici ce que ça donne:

screenshot Active Directory

Bref, assez de blabla, voici le script:

$DomainInfo =  Get-ADDomain

$RootOU = New-ADOrganizationalUnit -Name $DomainInfo.NetBiosName -PassThru

$UsersOU = New-ADOrganizationalUnit -Name "Users" -Path $RootOU.DistinguishedName -PassThru
$ComputersOU = New-ADOrganizationalUnit -Name "Computers" -Path $RootOU.DistinguishedName -PassThru
$GroupsOU = New-ADOrganizationalUnit -Name "Groups" -Path $RootOU.DistinguishedName -PassThru

$StdUsersOU = New-ADOrganizationalUnit -Name "Standard" -Path $UsersOU.DistinguishedName -PassThru
$SvcUsersOU = New-ADOrganizationalUnit -Name "Service" -Path $UsersOU.DistinguishedName -PassThru
$SchUsersOU = New-ADOrganizationalUnit -Name "Shared" -Path $UsersOU.DistinguishedName -PassThru
$PrvUsersOU = New-ADOrganizationalUnit -Name "Privileged" -Path $UsersOU.DistinguishedName -PassThru

New-ADOrganizationalUnit -Name "Distribution" -Path $GroupsOU.DistinguishedName
$SecGroupsOU = New-ADOrganizationalUnit -Name "Security" -Path $GroupsOU.DistinguishedName -PassThru

$SrvCompOU = New-ADOrganizationalUnit -Name "Servers" -Path $ComputersOU.DistinguishedName -PassThru
$CltCompOU = New-ADOrganizationalUnit -Name "Clients" -Path $ComputersOU.DistinguishedName -PassThru


Foreach ($SType in @('FS','CM')){
    New-ADComputer -Name ($DomainInfo.NetBiosName + $Stype + "01") -Path $SrvCompOU
}

For ($i = 1; $i -le 2;$i++){
    New-ADComputer -Name ($DomainInfo.NetBiosName + "WK" + $i.ToString("0000")) -Path $CltCompOU
}

New-ADUser -Name "Robert Huberty (ADM)" `
-GivenName "Robert" -Surname "Huberty" `
-SamAccountName "rhubertyadm" -UserPrincipalName ("rhubertyadm@" + $DomainInfo.DNSRoot) -Path $PrvUsersOU -PasswordNeverExpires:$true -Enabled:$true -AccountPassword(Read-Host -AsSecureString "Input Password") -DisplayName "Robert Huberty (Adm)"

Get-ADGroup -Filter {Name -like "*admins"} | Add-ADGroupMember -Members rhubertyadm

$FakeUsers = Import-CSV C:\TEMP\FakeNames.csv -Delimiter "," -Encoding UTF8
Foreach ($fakeUser in $FakeUsers) {
    $Surname = $fakeUser.Surname.Trim()
    $SAMAccountName = $fakeUser.GivenName.substring(0,1).ToLower() + $fakeUser.Surname.Substring(0,[System.Math]::Min(7, $Surname.Length)).ToLower()
    $SAMAccountName = [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes($SamAccountName))
    $SamAccountName = $SAMAccountName -replace ('''') -replace ('-')

    If(Get-ADUser -Filter {SamAccountName -eq $SAMAccountName}) {
        If($SAMAccountName.Length -eq 8) {
            $SAMAccountName = $SAMAccountName.Substring(0,7)
        }
        for($i=1; $i -lt 10; $i++){
            $SamIndex = $SAMAccountName + $i
            if(-not (Get-ADUser -Filter {SamAccountName -eq $SamIndex})){
                $SAMAccountName = $SamIndex
                break
            }
        }
    }
    
    $Params = $null
    $Params = @{
        Name                 = ($fakeUser.GivenName + " " + $fakeUser.Surname)
        GivenName            = $fakeUser.GivenName
        SamAccountName       = $SAMAccountName
        UserPrincipalName    = ($SamAccountName + "@" + $DomainInfo.DNSRoot)
        Path                 = $StdUsersOU
        PasswordNeverExpires = $false
        Enabled              = $true
        AccountPassword      = (ConvertTo-SecureString $fakeUser.Password -AsPlainText -Force)
        DisplayName          = ($fakeUser.GivenName + " " + $fakeUser.Surname)
    }

    New-ADUser @Params
}


$Servers = Get-ADComputer -Filter * -SearchBase $SrvCompOU

foreach($Server in $Servers){
    $GLGroup = New-ADGroup -Name ("GL_" + $Server.Name + "_Administrators") -SamAccountName ("GL_" + $Server.Name + "_Administrators") -GroupCategory Security -GroupScope DomainLocal -Path $SecGroupsOU -PassThru
    $GGGroup = New-ADGroup -Name ("GG_" + $Server.Name + "_Administrators") -SamAccountName ("GG_" + $Server.Name + "_Administrators") -GroupCategory Security -GroupScope Global -Path $SecGroupsOU -PassThru
    Add-ADGroupMember $GLGroup -Members $GGGroup.DistinguishedName
}


0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *