Question Doublons générés lors du traitement import AD

Plus d'informations
il y a 2 ans 8 mois #31205 par ericlm128
Oui c'est ca que je voulais voir
www.powershell-scripting.com/index.php/f...rt-ad?start=42#31148

J'ai déjà fait ce genre de chose, regarde ici (option 2 ou 3) :
www.reddit.com/r/PowerShell/comments/a5h...e_diacritics_%C3%AB/

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 8 mois #31206 par ericlm128
Fait attention au o e dans l'o c'est un vicelard car il se change la taille de la chaine de caractère

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois #31269 par witness

Oui c'est ca que je voulais voir
www.powershell-scripting.com/index.php/f...rt-ad?start=42#31148

J'ai déjà fait ce genre de chose, regarde ici (option 2 ou 3) :
www.reddit.com/r/PowerShell/comments/a5h...e_diacritics_%C3%AB/

Hello,
Suis de retour.

J'ai regardé l'article et en cherchant à comprendre je suis tombé sur un autre article qui proposait cette commande: Remove-StringLatinCharacters
J'ai testé et voilà ce que ça m'a donné:
PS C:\Users\toto> Remove-StringLatinCharacters -string "l'été"
l'ete
PS C:\Users\toto> Remove-StringLatinCharacters -string "âne"
ane
PS C:\Users\toto> Remove-StringLatinCharacters -string "noêl"
noel
PS C:\Users\toto> Remove-StringLatinCharacters -string "noël"
noel
PS C:\Users\toto> Remove-StringLatinCharacters -string "hôte"
hote
PS C:\Users\toto> Remove-StringLatinCharacters -string "elle est là"
elle est la

Du coup ça pourrait faire le job, seulement, en essayant cette commande dans le module powershell active directory, la commande est inconnue.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois #31273 par witness
Avec la solution 3 de ton lien, j'obtiens ceci:
PS C:\Users\Administrateur> Remove-DiacriticsAndSpaces -inputString "noêl"
noel
PS C:\Users\Administrateur> Remove-DiacriticsAndSpaces -inputString "âne"
ane
PS C:\Users\Administrateur> Remove-DiacriticsAndSpaces -inputString "l'été"
lete
PS C:\Users\Administrateur> Remove-DiacriticsAndSpaces -inputString "noël"
noel
PS C:\Users\Administrateur> Remove-DiacriticsAndSpaces -inputString "hôte"
hote
PS C:\Users\Administrateur> Remove-DiacriticsAndSpaces -inputString "elle est là"
elleestla

Je peux utiliser cette fonction du coup.
Par contre, comment l'appliquer seulement à quelques variables ?

Actuellement, dans mon script, j'ai ces 3 lignes qui sont concernées:
$sn = $_.Nom -replace '[^a-z0-9]+',''
$givenname = $_.Prenom -replace '[^a-z0-9]+',''
$SAM = $SAM.SubString(0, [Math]::Min(19, $SAM.length)) -replace '[^a-z A-Z 0-9]+','' -replace '[ ]',''


Le script complet:
$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"

$AD_SAM = get-ADuser -filter * -SearchBase "DC=mondomaine,DC=local" | Select-Object -ExpandProperty SamAccountName

$NewUsers = $users | ForEach-Object {
    $sn = $_.Nom -replace '[^a-z0-9]+',''
    $givenname = $_.Prenom -replace '[^a-z0-9]+',''
    $Classe = $_.Classe
    $identifiant = $_.identifiant
    $ou = "OU=importusers,DC=mondomaine,DC=local"
    $description = 'GCU-ORG{$ELEVE}$' + $Classe
    $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()

    
    if ($AD_SAM -contains $SAM)
    {
        for ($i = 1 ; $AD_SAM -contains ($SAM + $i) ; $i++)
        {
        }
        $SAM = $SAM + $i
    }
    $AD_SAM += $SAM
    
    $SAM = $SAM.SubString(0, [Math]::Min(19, $SAM.length)) -replace '[^a-z A-Z 0-9]+','' -replace '[ ]',''


    $CN = $sn + " " + $givenname + " " + "[$identifiant]"
    $displayName = $CN
    $UPN = $SAM + "@mondomaine.local"
    $userAccountControl = 66050
    $CannotChangePassword = 1
    $HomeDrive = "U"
    $HomeDirectory = "\\test\test"
    $ProfilePath = "C:\users"
    $ScriptLogon = "test"
    $Password = '{0}{1}' -f (get-random -Minimum 1000000 -Maximum 9999999), [char](get-random -Minimum 65 -Maximum 90)
    $Password = $Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](get-Random -Minimum 65 -Maximum 78)
    $Secure_String_pwd = ConvertTo-SecureString $Password -AsPlainText -Force
    $Enabled = 1
    

New-ADuser -displayName $displayName -Path $ou -Description $description -SamAccountName $SAM -givenname $givenname -Surname $sn -name $displayName -UserPrincipalName $UPN -PasswordNeverExpires $userAccountControl -CannotChangePassword $CannotChangePassword -HomeDrive $HomeDrive -HomeDirectory $HomeDirectory -ProfilePath $ProfilePath -ScriptPath $ScriptLogon -Enabled $Enabled -Accountpassword $Secure_String_pwd


[PSCustomObject]@{
    Nom = $sn
    Prenom = $givenname
    OU = $ou
    Description= $description
    Login = $SAM
    Lettre_lecteur = $HomeDrive
    Dossier_personnel = $HomeDirectory
    Chemin_profil = $ProfilePath
    ScriptLogon = $ScriptLogon
    Mot_de_passe = $Password
    }

}

$NewUsers | Export-Csv -path "C:\Users\Administrateur\Desktop\export.csv" -Append -NoTypeInformation -Delimiter ";"

Merci 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois - il y a 2 ans 7 mois #31274 par ericlm128
$sn = $_.Nom -replace '[^a-z0-9]+',''
$sn = Remove-DiacriticsAndSpaces -inputString $sn

$givenname = $_.Prenom -replace '[^a-z0-9]+',''
$givenname = Remove-DiacriticsAndSpaces -inputString $givenname

$SAM = $SAM.SubString(0, [Math]::Min(19, $SAM.length)) -replace '[^a-z A-Z 0-9]+','' -replace '[ ]',''
$SAM = Remove-DiacriticsAndSpaces -inputString $SAM
Dernière édition: il y a 2 ans 7 mois par ericlm128.
Les utilisateur(s) suivant ont remercié: witness

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois - il y a 2 ans 7 mois #31278 par witness
J'ai essayé le script ci-dessous mais il me supprime les caractères avec accent pour le $sn et $givenname.
Et comme le $Sam est composé du $sn et $givenname, je perds des lettres.

SCRIPT


function Remove-DiacriticsAndSpaces
{
    Param(
        [String]$inputString
    )
    #replace diacritics
    $sb = [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes($inputString))
    #remove spaces and anything the above function may have missed
    return($sb -replace '[^a-z0-9]', '')
}

$users = import-csv -path "C:\Users\Administrateur\Desktop\importusers.csv" -delimiter ";"

$AD_SAM = get-ADuser -filter * -SearchBase "DC=Mondomaine,DC=local" | Select-Object -ExpandProperty SamAccountName

$NewUsers = $users | ForEach-Object {
    $sn = $_.Nom
    $sn = Remove-DiacriticsAndSpaces -inputString $sn
    $givenname = $_.Prenom
    $givenname = Remove-DiacriticsAndSpaces -inputString $givenname
    $Classe = $_.Classe
    $identifiant = $_.identifiant
    $ou = "OU=importusers,DC=Mondomaine,DC=local"
    $description = 'GCU-ORG{$ELEVE}$' + $Classe
    $SAM = $givenname.Substring(0,1).ToLower() + $sn.ToLower()
    
    if ($AD_SAM -contains $SAM)
    {
        for ($i = 1 ; $AD_SAM -contains ($SAM + $i) ; $i++)
        {
        }
        $SAM = $SAM + $i
    }
    $AD_SAM += $SAM
    
    $SAM = $SAM.SubString(0, [Math]::Min(19, $SAM.length)) -replace '[ ]',''
    $SAM = Remove-DiacriticsAndSpaces -inputString $SAM

    $CN = $sn + " " + $givenname + " " + "[$identifiant]"
    $displayName = $CN
    $UPN = $SAM + "@Mondomaine.local"
    $userAccountControl = 66050
    $CannotChangePassword = 1
    $HomeDrive = "U"
    $HomeDirectory = "\\test\test"
    $ProfilePath = "C:\users"
    $ScriptLogon = "test"
    $Password = '{0}{1}' -f (get-random -Minimum 1000000 -Maximum 9999999), [char](get-random -Minimum 65 -Maximum 90)
    $Password = $Password -replace '0',(Get-Random -Minimum 1 -Maximum 9) -replace 'O',[char](get-Random -Minimum 65 -Maximum 78)
    $Secure_String_pwd = ConvertTo-SecureString $Password -AsPlainText -Force
    $Enabled = 1
    
New-ADuser -displayName $displayName -Path $ou -Description $description -SamAccountName $SAM -givenname $givenname -Surname $sn -name $displayName -UserPrincipalName $UPN -PasswordNeverExpires $userAccountControl -CannotChangePassword $CannotChangePassword -HomeDrive $HomeDrive -HomeDirectory $HomeDirectory -ProfilePath $ProfilePath -ScriptPath $ScriptLogon -Enabled $Enabled -Accountpassword $Secure_String_pwd

[PSCustomObject]@{
    Nom = $sn
    Prenom = $givenname
    OU = $ou
    Description= $description
    Login = $SAM
    Lettre_lecteur = $HomeDrive
    Dossier_personnel = $HomeDirectory
    Chemin_profil = $ProfilePath
    ScriptLogon = $ScriptLogon
    Mot_de_passe = $Password
    }
}

$NewUsers | Export-Csv -path "C:\Users\Administrateur\Desktop\export.csv" -Append -NoTypeInformation -Delimiter ";"



Pourtant quand je teste cette fonction directement dans le module powershell active directory, j'ai bien un changement et non une suppression qui s'opère:

FONCTION


function Remove-DiacriticsAndSpaces
{
    Param(
        [String]$inputString
    )
    #replace diacritics
    $sb = [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding("Cyrillic").GetBytes($inputString))
    #remove spaces and anything the above function may have missed
    return($sb -replace '[^a-z0-9]', '')
}

Remove-DiacriticsAndSpaces -inputString Etê@

Ete



Pour info, voici le contenu de mon fichier de d'import:

Nom;Prenom;Classe;Identifiant
LOUIS;Virgile;102;6082
LOUIS;Victor;102;6078
PETIT;Lisa;104;4890
PETIT;Lou;502;4886
DUPOND;Assia;309;3701
DUPOND;Ambrine;610;7802
LOUIS;Virgile;102;6003
LOUIS;Victor;102;6004
PETIT;Lisa;104;4805
PETIT;Lou;502;4806
Pétit;Jêan;900,9874

Et voici le résultat de mon fichier d'export en fin de traitement:

"Nom";"Prenom";"OU";"Description";"Login";"Lettre_lecteur";"Dossier_personnel";"Chemin_profil";"ScriptLogon";"Mot_de_passe"
"DUPOND";"Ambrine";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$610";"adupond";"U";"\\test\test";"C:\users";"test";"2474487K"
"LOUIS";"Virgile";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$102";"vlouis";"U";"\\test\test";"C:\users";"test";"5994973F"
"LOUIS";"Victor";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$102";"vlouis1";"U";"\\test\test";"C:\users";"test";"6261547K"
"PETIT";"Lisa";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$104";"lpetit";"U";"\\test\test";"C:\users";"test";"5252585B"
"PETIT";"Lou";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$502";"lpetit1";"U";"\\test\test";"C:\users";"test";"1385456W"
"DUPOND";"Assia";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$309";"adupond1";"U";"\\test\test";"C:\users";"test";"9362423L"
"LOUIS";"Virgile";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$102";"vlouis2";"U";"\\test\test";"C:\users";"test";"8762193J"
"LOUIS";"Victor";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$102";"vlouis3";"U";"\\test\test";"C:\users";"test";"6423677J"
"PETIT";"Lisa";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$104";"lpetit2";"U";"\\test\test";"C:\users";"test";"4748119D"
"PETIT";"Lou";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$502";"lpetit3";"U";"\\test\test";"C:\users";"test";"4541454I"
"Ptit";"Jan";"OU=importusers,DC=Mondomaine,DC=local";"GCU-ORG{$ELEVE}$900,9874";"jptit";"U";"\\test\test";"C:\users";"test";"1356626V"

On voit bien à la dernière ligne que les caractères avec accent ont été supprimés.
Dernière édition: il y a 2 ans 7 mois par witness.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.185 secondes
Propulsé par Kunena