Powershell AD module
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Domaine | Active Directory |
| Module | ActiveDirectory
|
| Prérequis | Niveau fonctionnel 2003 SP1 mini |
| Voir aussi | Module AD · Powershell ADSI |
Utilisation des cmdlets du module ActiveDirectory. Le module doit d'abord être
importé (voir Import-module et Module AD) ; il expose aussi le fournisseur
AD: (voir Get-psprovider).
Navigation dans le fournisseur AD:
cd AD:
Get-ChildItem
cd '.\DC=domain,DC=com'
cd .\OU=test
Move-Item '.\CN=user name' 'CN=toto,DC=domain,DC=com'
Set-ItemProperty -Path 'AD:\CN=toto,DC=domain,DC=com' -Name 'EmployeeID' -Value '12345'
(Get-ItemProperty -Path 'AD:\CN=toto,DC=domain,DC=com' -Name 'EmployeeID').EmployeeID
Recherche d'objets
# Filtre LDAP
Get-ADObject -LDAPFilter '(name=*jean*)'
Get-ADObject -LDAPFilter '(&(objectCategory=computer)(name=win*))'
# Filtre PowerShell
Get-ADObject -Filter *
Get-ADObject -Filter { objectClass -eq 'computer' }
Get-ADComputer -Filter { (name -like 'Win*') -and (enabled -eq 'False') }
# Par identité (nom, GUID, SID ou DN)
Get-ADComputer -Identity 'SRV-EXCH01'
Get-ADComputer -Identity 'CN=SRV-EXCH01,CN=Computers,DC=domain,DC=com'
Gestion des utilisateurs
Get-Command -Module ActiveDirectory -Name *user*
Get-ADUser -Filter *
Get-ADUser -Filter * -SearchBase 'OU=Finance,DC=domain,DC=com'
# Création simple
New-ADUser -Name JoeBar
# Création détaillée
New-ADUser -SamAccountName Posichon -Name 'Paul Posichon' `
-GivenName Paul -Surname Posichon `
-DisplayName 'Paul Posichon' -Description 'Utilisateur' `
-HomeDrive 'H:' -HomeDirectory '\\Server\user' `
-Path 'OU=Finance,DC=domain,DC=com'
Mots de passe et activation :
$pwd = ConvertTo-SecureString 'MotDePasse!' -AsPlainText -Force
New-ADUser -SamAccountName DucableJR -Name 'JR Ducable' -AccountPassword $pwd
Set-ADAccountPassword -Identity DucableJR -NewPassword $pwd -Reset
New-ADUser -SamAccountName Posichon -Name 'Paul Posichon' `
-Path 'OU=Finance,DC=domain,DC=com' -AccountPassword $pwd -Enabled $true
Lecture / modification / suppression d'attributs :
Get-ADUser -Identity Posichon -Property Name,WhenCreated,PasswordLastSet
Get-ADUser -Identity Posichon -Property *
Set-ADUser -Identity Posichon -Replace @{
Description = 'Utilisateur sympathique'
TelephoneNumber = '0102030405'
OtherTelephone = @('0102030406','0102030407')
}
Set-ADUser -Identity Posichon -Clear OtherTelephone
Remove-ADUser -Identity Posichon -Confirm:$false
Gestion des groupes
Get-Command -Module ActiveDirectory -Name *group*
Get-ADGroup -Filter *
Get-ADGroup -Filter { GroupScope -eq 'Universal' } | Format-Table Name, GroupScope
Get-ADGroup -Identity Administrators
# Création (groupe de sécurité par défaut)
New-ADGroup -Name UtilisateurVDI -GroupScope DomainLocal -GroupCategory Security
New-ADGroup -Name UtilisateurTS -GroupScope Global -GroupCategory Distribution
# Membres
Get-ADGroupMember -Identity Administrators -Recursive
Add-ADGroupMember -Identity UtilisateurVDI -Members BracameE, DucableJR
Add-ADPrincipalGroupMembership -Identity DucableJR -MemberOf group1, group2
Remove-ADGroupMember -Identity UtilisateurVDI -Members DucableJR -Confirm:$false
Remove-ADGroup -Identity GrpDelegue1
Scripts d'exploitation
Comptes d'ordinateurs périmés
Version avec le module AD (niveau fonctionnel 2003 SP1 minimum) :
# Get-MachineAccounts.ps1
[datetime]$date = '01/01/1601'
$comptes = Get-ADComputer -Filter * -Properties Name,LastLogonTimeStamp,OperatingSystem,OperatingSystemVersion
$comptes | Select @{n='Nom commun'; e={$_.Name}},
@{n='Dernière connexion'; e={$date.AddTicks($_.LastLogonTimeStamp)}},
@{n='OS'; e={$_.OperatingSystem}},
@{n='Version'; e={$_.OperatingSystemVersion}}
Équivalent bas niveau via DirectorySearcher :
[datetime]$date = '01/01/1601'
$objDomaine = [ADSI]''
$objRecherche = New-Object System.DirectoryServices.DirectorySearcher($objDomaine)
$objRecherche.Filter = '(&(SamAccountType=805306369)(name=*))'
$comptes = $objRecherche.FindAll()
Création d'utilisateurs par lots
Excel n'exporte qu'avec le séparateur « ; » ; Import-Csv attend « , ».
Le plus simple :
Import-Csv .\ListeUtilisateurs.csv -Delimiter ';' | New-ADUser -Path 'OU=Finance,DC=domain,DC=com'
Surveillance des ajouts au groupe Admins du domaine
# Watch-AdminGroup.ps1
$strComputer = '.'
$query = New-Object System.Management.WQLEventQuery `
"SELECT * FROM __InstanceCreationEvent WITHIN 30 WHERE TargetInstance ISA 'Win32_NTLogEvent' AND TargetInstance.EventCode = '632'"
$scope = New-Object System.Management.ManagementScope "\\$strComputer\root\cimv2"
$watcher = New-Object System.Management.ManagementEventWatcher $scope, $query
$watcher.Start()
while ($true) {
$event = $watcher.WaitForNextEvent()
if ($event.TargetInstance.Message -match 'Admins du domaine') {
$message = New-Object System.Net.Mail.MailMessage `
'mouchard@example.com', 'admin@example.com',
'Alerte : ajout dans Admins du domaine',
"$($event.TargetInstance.User)`n$($event.TargetInstance.TimeWritten)"
$client = New-Object System.Net.Mail.SmtpClient 'smtp.example.com'
$client.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$client.Send($message)
}
}
Voir aussi
- Module AD
- Powershell ADSI — approche ADSI/LDAP bas niveau
- Import-csv
- Get-wmiobject