Bonjour à tous,
voilà j'ai un problème, je vous explique le contexte:
j'ai une liste d'USER (nom, prénom à désactivé et déplacé)
je lance un script qui récupère le name,SurName,GivenName,SamaccountName,UserPrincipalName, et le DistinguishedName pour savoir ou il sont dans l'ad avant déplacement, bien sur j'export toute ses info.
Ensuite je cherche à faire un script qui contrôle si l'user existe bien, fait des log (je cherche a exclure l'OU essai, ça fonctionne) et j'exporte sous forme de tableau.
Mon problème c'est que mon script tapait dans toute l'AD (pas optimal et très long) je cherche a faire un get-aduser dans une OU cible mais ça pourri mon script.
Voici le script bancale
Import-Module ActiveDirectory
# Chemin vers le fichier CSV
$Fichier=import-csv c:\tmp\fichier.csv
$array = @()
#exclusion d'une OU
$OUDN = 'OU=essai,OU=user,OU=@test1.local,DC=test1,DC=local'
# Fichier de logs nommé à la date et l'heure de l'exécution du script
$DateHeure = Get-Date -Format "yyyyMMddHHmm"
$log = "c:\tmp\log\fichier_$DateHeure.log"
$action = foreach($user in $fichier) {
#$testuser = $users.SamAccountName
$Users = Get-ADUser -identity $user.SamAccountName | Select-Object name,SurName,GivenName,SamaccountName,UserPrincipalName,Enabled,DistinguishedName
If ($Users -ne $Null)
{
$line = New-Object -TypeName psobject
<#$line = crée un object de type powershell#>
$line | Add-Member -MemberType NoteProperty -Name 'SamAccount1' -Value "$user.SamAccountName"
$line | Add-Member -MemberType NoteProperty -Name 'Name' -Value $($Users.Name)
$line | Add-Member -MemberType NoteProperty -Name 'SurName' -Value $($Users.SurName)
$line | Add-Member -MemberType NoteProperty -Name 'GivenName' -Value $($Users.GivenName)
$line | Add-Member -MemberType NoteProperty -Name 'Exist' -Value "True"
$line | Add-Member -MemberType NoteProperty -Name 'SamaccountName' -Value $($Users.SamaccountName)
$line | Add-Member -MemberType NoteProperty -Name 'UserPrincipalName' -Value $($Users.UserPrincipalName)
$line | Add-Member -MemberType NoteProperty -Name 'Enabled' -Value $($Users.Enabled)
$line | Add-Member -MemberType NoteProperty -Name 'DistinguishedName' -Value $($Users.DistinguishedName)
$array += $line
}
else
{
$line = New-Object -TypeName psobject
$line | Add-Member -MemberType NoteProperty -Name 'SamAccount1' -Value "$user.SamAccountName"
$line | Add-Member -MemberType NoteProperty -Name 'Name' -Value "Null"
$line | Add-Member -MemberType NoteProperty -Name 'SurName' -Value "Null"
$line | Add-Member -MemberType NoteProperty -Name 'GivenName' -Value "Null"
$line | Add-Member -MemberType NoteProperty -Name 'Exist' -Value "Not Found"
$line | Add-Member -MemberType NoteProperty -Name 'SamaccountName' -Value "Null"
$line | Add-Member -MemberType NoteProperty -Name 'UserPrincipalName' -Value "Null"
$line | Add-Member -MemberType NoteProperty -Name 'Enabled' -Value "False"
$line | Add-Member -MemberType NoteProperty -Name 'DistinguishedName' -Value "Null"
$array += $line
}
}
$array | ft
#$array | Export-csv -path "c:\tmp\array.csv" -Delimiter ";" -NoTypeInformation
$action #| export-csv -Path c:\tmp\export-user.csv -NoTypeInformation -Encoding UTF8
#$action1 | export-csv -Path c:\tmp\userunknow.csv -NoTypeInformation -Encoding UTF8
foreach ($user in $Fichier){
try{
$UserLogin = $user.SamAccountName
Set-ADUser -Identity $user.Samaccountname -Enabled $false
Get-ADUser -Filter $user.SamAccountName -SearchBase 'OU=user,OU=@test1.local,DC=test1,DC=local' | Where-Object { $_.DistinguishedName -notlike "*,$OUDN" } |move-adobject -targetpath "ou=désactivé,ou=@test1.local,dc=test1,dc=local"
Add-Content -Path "$log" -Value "l'utilisateur $UserLogin est désormais désactivé et déplacé !"
}
catch{
Add-Content -Path "$log" -Value "ERREUR ! Impossible de mettre à jour l'utilisateur $UserLogin !"
}
}
Si quelqu'un à une idée, je pense que ça viens de la fin sur le get-adUser -Filter juste après le set, j'ai aussi essayé avec des {}sur cette ligne ça change rien.
en revanche si on remplace cette ligne par
Get-ADUser -Filter $user.SamAccountName -SearchBase 'OU=user,OU=@test1.local,DC=test1,DC=local' | Where-Object { $_.DistinguishedName -notlike "*,$OUDN" } |move-adobject -targetpath "ou=désactivé,ou=@test1.local,dc=test1,dc=local"
tout fonctionne mais ça get la totalité de l'ad et pas seulement l'OU utilisateur.
voilou
Et bonne année à tous
---------------
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0