Skip to content

Documentation

Script powershell

Syncronisation

Des Windows Active directory

repadmin /syncall /APeD

Avec Azure AD connect

Start-ADSyncSyncCycle -PolicyType Delta

Installation du module PowerShell Active Directory

Import-Module ActiveDirectory

Chercher le nom du groupe

get-adgroup -filter * | sort name | select Name

Pour être un peux plus précis :

Get-ADGroup -Filter 'Name -like "HAB-COMMON-LYON*"'

Récupérer les nom de poste grâce a la description

Get-ADComputer -Filter "description -like ""*NOMDEFAMILLE*"""

Récupérer la description grâce au nom de poste

test

Get-ADComputer -Filter 'Name -like "*FRCE69-101LT700*"' -Properties *

Récupérer les nom de poste d'un groupes en fichier excel

Get-ADGroupMember -identity nom du groupe | select name | Export-csv -path C:\Output\Groupmembers.csv -NoTypeInformation

Récupérer la liste des poste

Exporter des groupe AD et des groupes sur le serveur de fichier

Get-ADComputer -Filter {name -Like "*CT*"} -SearchBase 'OU=FR-CENTRE-EST,DC=domaine,DC=local' -Property DistinguishedName, Name, Description | Select -Property DistinguishedName, Name, Description | Export-Csv -NoTypeInformation -UseCulture -Encoding OEM -Path "C:\Users\user\Downloads\test.csv"

Installer l'outil qui permet d'exporter les groupes sur le serveur de fichier

gsudo  choco install permissionsreporter -y

mettre plus de chose

Exporter les utilisateur de groupes

#dossier groupe : il faut mettre les groupe ou l'on souhaite l'extration des utilisateur
$Groups = Get-Content C:\Users\user\Downloads\group.txt
$output = Foreach($group in $groups)
{
write-Output "Voici les membres de $group :"

Get-ADGroupMember $group | Select-Object name

write-Output " "

}
#la sortit text de l'export
$output | Out-File -encoding UTF8 -append C:\Users\user\Downloads\members.txt

Exemple : Faire une extract de tous les postes avec la version du système d'exploitation et le nom.

Get-ADComputer -filter * -SearchBase "OU=Organisation,DC=Organisation,DC=com" -Properties OperatingSystemVersion,Modified  | where { ($_.DistinguishedName -notlike "*OU=Disable Computer,OU=Organisation,DC=Organisation,DC=com*") | Sort Name | Format-Table Name,Enabled,OperatingSystemVersion,Modified -AutoSize | Out-File C:\Users\adminuser\Downloads\versionos.txt

Exporter les utilisateurs inactif depuis plus de 6 mois

$date = Get-Date
$sixMonthsAgo = $date.AddMonths(-6)
$users = Get-ADUser -Filter {Enabled -eq $True} -Properties LastLogonTimeStamp | Where-Object {([datetime]::FromFileTime($_.LastLogonTimeStamp)) -lt $sixMonthsAgo}
$users | Select-Object -Property Name

Avoir une liste des PC ayant recu la GPO laps ou non

$OU = "OU=Suisse,OU=Organisation,DC=Organisation,DC=com"
$PasswordAttribute = "ms-Mcs-AdmPwd"

$Computers = Get-ADComputer -SearchBase $OU -Filter *
$Results = @()

foreach ($Computer in $Computers) {
 $Password = (Get-ADComputer $Computer.Name -Properties $PasswordAttribute).$PasswordAttribute
 if ($Password) {
   $Result = [PSCustomObject]@{
     ComputerName = $Computer.Name
     Password = $Password
     Status = "Modified"
   }
 } else {
   $Result = [PSCustomObject]@{
     ComputerName = $Computer.Name
     Password = $null
     Status = "Not Modified"
   }
 }

 $Results += $Result
}

$Results | Select-Object ComputerName, Status, Password | Export-Csv -Path "LAPS_Deployment_Results.csv" -NoTypeInformation

Script de désactivation de poste inactif

$d = [DateTime]::Today.AddDays(-90)
$logPath = "C:\Disable-Computer-History" # Spécifiez le chemin de votre fichier log

# Déplacer les comptes déjà désactivés pour les mettres dans la bonne OU
Get-ADComputer -filter {(enabled -eq "false")} -SearchBase "OU=Organisation,DC=Organisation,DC=com" -properties cn, distinguishedName | 
    Where-Object { $_.distinguishedName -notlike "*OU=Disable Computer,OU=Organisation,DC=Organisation,DC=com*" } | 
    ForEach-Object {
        $_ | Move-ADObject -Targetpath 'OU=Disable Computer,OU=Organisation,DC=Organisation,DC=com'
        "$($_.Name) le $(Get-Date) deja desactive " | Out-File -FilePath $logPath -Append
    }

# Déplacer et désactiver les comptes inactifs depuis 90 jours
Get-ADComputer -filter {(enabled -eq "true") -and (lastlogondate -le $d)} -SearchBase "OU=Organisation,DC=Organisation,DC=com" -properties cn,lastlogondate | 
    ForEach-Object {
        $_ | Move-ADObject -Targetpath 'OU=Disable Computer,OU=Organisation,DC=Organisation,DC=com'
        "$($_.Name) le $(Get-Date) inactif depuis plus de 90 jours" | Out-File -FilePath $logPath -Append
    }

# Déplacer et désactiver les comptes sans date de dernière connexion
Get-ADComputer -filter {enabled -eq "true"} -SearchBase "OU=Organisation,DC=Organisation,DC=com" -properties cn,lastlogondate | 
    Where-Object{$_.lastlogondate -eq $null} | 
    ForEach-Object {
        $_ | Move-ADObject -Targetpath 'OU=Disable Computer,OU=Organisation,DC=Organisation,DC=com'
        "$($_.Name) le $(Get-Date) aucune date de derniere connexion" | Out-File -FilePath $logPath -Append
    }

# Désactiver les comptes de l'OU "Disable Computer"
Get-ADComputer -Filter 'Name -like "*"' -SearchBase "OU=Disable Computer,OU=Organisation,DC=Organisation,DC=com" | Disable-ADAccount | 
ForEach-Object {
    $_ | Move-ADObject -Targetpath 'OU=Disable Computer,OU=Organisation,DC=Organisation,DC=com'
    "$($_.Name) le $(Get-Date) dans OU disable" | Out-File -FilePath $logPath -Append
}

Scipt de désactivation de compte utilisateur

Affiché tous les utilisateurs qui ne sont jamais connecter

$LogFile = "C:\Temp\InactiveAccounts.txt"
$90DaysAgo = (Get-Date).AddDays(-90)
$ADUsers = Get-ADUser -Filter * -SearchBase "OU=Organisation,DC=Organisation,DC=com" -Properties LastLogonDate,Enabled |
           Where-Object { $_.DistinguishedName -notlike "*,OU=Service Account,OU=Organisation,DC=Organisation,DC=com" }
foreach ($User in $ADUsers) {
    if ($User.LastLogonDate -lt $90DaysAgo -and $User.Enabled) {
        $UserDetails = "User: {0}, Last Logon: {1}" -f $User.SamAccountName, $User.LastLogonDate
        Add-Content -Path $LogFile -Value $UserDetails
    }
}

Script test qui liste les utilisateur qui vont être désactivé

$outputFile = "C:\File.txt"
$currentDate = Get-Date
$userAccounts = Get-ADUser -Filter * -Properties LastLogonDate,Enabled,PasswordLastSet |
   Where-Object {$_.Enabled -eq $true -and $_.DistinguishedName -notlike "*,OU=Service Account,OU=Organisation,DC=Organisation,DC=com*" -and $_.LastLogonDate -ne $null}
$inactiveAccounts = $userAccounts | Where-Object {$_.LastLogonDate -lt ($currentDate.AddDays(-90))}
foreach ($account in $inactiveAccounts) {
   Add-Content -Path $outputFile -Value $account.SamAccountName
   }

Script qui désactive les utilisateurs

$destinationOU = "OU=Comptes desactives,OU=Organisation,DC=Organisation,DC=com"
$currentDate = Get-Date
$userAccounts = Get-ADUser -Filter * -Properties LastLogonDate,Enabled,PasswordLastSet |
    Where-Object {$_.Enabled -eq $true -and $_.DistinguishedName -notlike "*,OU=Service Account,OU=Organisation,DC=Organisation,DC=com*" -and $_.LastLogonDate -ne $null}
$inactiveAccounts = $userAccounts | Where-Object {$_.LastLogonDate -lt ($currentDate.AddDays(-90))}
foreach ($account in $inactiveAccounts) {
    Disable-ADAccount -Identity $account
    Move-ADObject -Identity $account.DistinguishedName -TargetPath $destinationOU
}

Script qui déplace les utilisateurs après 90 jours d'inactivités dans une OU après 30 jours ces utilisateurs sont déplacées dans une autre OU et sont désactivé

# Set variables
$inactiveDays = 90
$inactiveOU = "OU=Inactive Account,OU=Organisation,DC=Organisation,DC=com"
$disableOU = "OU=Disable Account,OU=Organisation,DC=Organisation,DC=com"
$disableDays = 30
$date = Get-Date


# Get a list of inactive users
$inactiveUsers = Search-ADAccount -AccountInactive -TimeSpan "$inactiveDays" -UsersOnly


# Move inactive users to the inactive OU, unless they're already in the disable OU
foreach ($user in $inactiveUsers) {
    $userDN = $user.DistinguishedName
    $userOU = $userDN.Substring($userDN.IndexOf("OU="))
    if ($userOU -ne $disableOU) {
        Move-ADObject -Identity $userDN -TargetPath $inactiveOU
    }
}


# Get a list of inactive users in the inactive OU for more than $disableDays
$disableUsers = Get-ADUser -SearchBase $inactiveOU -Filter {Enabled -eq $true} | where {$date.Subtract($_.LastLogonDate).Days -ge $disableDays}


# Disable and move users to the disable OU
foreach ($user in $disableUsers) {
    $userDN = $user.DistinguishedName
    Disable-ADAccount -Identity $userDN
    Move-ADObject -Identity $userDN -TargetPath $disableOU

Lister les utilisateurs qui n'ont pas d'expiration de mot de passe

Le script cherche tout les user dans le domaine sauf : 1. Dans l'OU : Service Account,OU=Organisation,DC=Organisation,DC=on 2. Les comptes désactivés

Get-ADUser -Filter {(PasswordNeverExpires -eq $true) -and (Enabled -eq $true)} -Properties Name, UserPrincipalName, PasswordNeverExpires |  Where-Object { $_.DistinguishedName -notlike "*,OU=Service Account,OU=Organisation,DC=Organisation,DC=com" } | Select-Object name,PasswordNeverExpires

Désactivation "bulk" de compte utilisateur

$destinationOU = "OU=Disable Account,OU=Organisation,DC=Organisation,DC=com"
$userPrincipalNameList = Get-Content "UserList.txt"
$outputFile = "OutputResult.txt"

foreach ($userPrincipalName in $userPrincipalNameList) {
    $user = Get-ADUser -Filter {UserPrincipalName -eq $userPrincipalName}

    if ($user) {
        Disable-ADAccount -Identity $user

        Move-ADObject -Identity $user.ObjectGUID -TargetPath $destinationOU

        $message = "$userPrincipalName est désactivé"
        Write-Host $message
        $message | Out-File -Append -FilePath $outputFile
    } else {
        $errorMessage = "$userPrincipalName n'a pas été trouvé"
        Write-Host $errorMessage
        $errorMessage | Out-File -Append -FilePath $outputFile
    }
}

Lister les users d'une OU

Get-ADUser -Filter * -SearchBase " OU=GA-OnPrem,OU=Generic Account,OU=Organisation,DC=Organisation,DC=com " -Property Name | Select-Object Name

Lister les postes d'une OU

Get-ADComputer -Filter 'Name -like "*"' -SearchBase "OU=Disable Computer,OU=Organisation,DC=Organisation,DC=com" | Select-Object "Name"

Vérifier la syncronisation des controlleurs de domaine

repadmin /showrepl *
Version plus courte :

repadmin /replsum

Donnés des accès types "Workstation Admin"

Création de l'utilisateur "Workstation"

Se connecter sur un active directory et aller dans la console AD

Dans l' OU=Administrator,OU=Groupe,OU=Organisation,DC=Organisation,DC=com ajouter l'utilisateur souhaité dans le groupe "Workstation Admin".

l'ajouter dans ce groupe va le donné accès administrateur a tous les postes du domaine legacy active directory.

Nous allons maintenant aussi l'ajouter pour qu'il soit administrateur sur tous les postes Endpoint.

Se connecter sur https://endpoint.microsoft.com/ aller dans groupe Ajouter des membres - Microsoft Endpoint Manager admin center

Donnés des accès types "Serveur Admin"

Donnés des accès types "Domain Admin"

Script PowerShell

ici

Stratégie de mot de passe

Pour les authentifications Legacy

Crée une stratégie de mot de passe dans l'OU CN=Password Settings Container,CN=System,DC=nomdedomaine,DC=com

Cocher uniquement la case "Appliquer la stratégie de verrouillage des comptes"

Si l'on souhaite ajouter tous les utilisateurs a cette stratégie on ajoute dans la section "s'applique directement à" ajouter "Domain Users"

On peut ensuite essayer sur un poste :

Pour les postes Endpoint

  • Dans la section Appareils | Windows > Profils de configuration > Crée un profil

  • Choisisser le nom de la stratégie dans la section paramètre de configuration aller dans "Verrouillage de l'appareil".

  • Cocher la case dans "mot de passe de l'appareil activé" "Nombre dmaximal de tentatives de mot de passe de l'appareil"

Attention cette stratégie va verrouillé le poste sur BitLocker.

Pour Microsoft365

Azure > Sécurité > Méthode d'authentification > protection par mot de passe

Sécurisation de l'AD

Source : Microsoft