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