Le blog technique

Toutes les astuces #tech des collaborateurs de PI Services.

#openblogPI

Retrouvez les articles à la une

[Azure Active Directory] – Définir le lieu d’utilisation

Lorsque vous synchronisez vos utilisateurs via « Azure AD Connect », que vos utilisateurs sont dans différents pays et que vous utilisez l’audioconférence dans Teams, il semblerait logique que vos utilisateurs se voient attribuer un numéro « locale« , plutôt qu’un numéro « Français ».

 

Pour ce faire il est important de définir le lieu d’utilisation (Usage Location) dans Azure Active Directory, il est donc important de remplir l’attribut « Country » dans votre Active Directory OnPremise.

La construction est basé sur deux lettres, vous pourrez trouver la correspondance des pays et des lettres dans le lien ci-dessous:

Attention : Vous devrez utiliser les deux lettres en majuscule de la colonne « Language Culture Name« 

https://docs.microsoft.com/en-us/previous-versions/commerce-server/ee825488(v=cs.20)?redirectedfrom=MSDN

 

Vous pouvez fixer cet attribut à l’aide de Powershell via la commande ci-dessous (en prenant soin de remplacer « Mathieu » par le nom de votre utilisateur) :

Get-ADUser Mathieu | Set-ADUser -Replace @{‘Country’=”US”}

Ou alors en important un fichier csv pour une modification en masse, exemple de code ci-dessous.

# Import Csv and Set PreferredLanguage Attribute for each user
Import-csv C:\Temp\ToFixed.csv | foreach {
    $SamAccountName = $_.SamAccountName
    $Attribute = $_.Attribute
    Try {
        # Modifying PreferredLanguage Attribute
        Set-ADUser -Identity $SamAccountName -Replace @{‘Country’=$Attribute} -ErrorAction Stop 
        }
    Catch {
        $SamAccountName | Add-Content C:\temp\ErrorUsageLocation.txt
        }
    # Release
    $SamAccountName = $null
    $Attribute = $null
    }

 

[Office 365] – Fixer la langue par défaut pour OneDrive

Lorsque vous synchronisez vos utilisateurs via « Azure Ad Connect » et, que vous avez des utilisateurs dans différents pays, la langue par défaut pour chacun des utilisateurs dépend d’un attribut de votre Active Directory OnPremise, cet attribut est le « preferredLanguage« .

Il devra être construit en suivant la nomenclature « Language Culture Name » du lien ci-dessous :

https://docs.microsoft.com/en-us/previous-versions/commerce-server/ee825488(v=cs.20)?redirectedfrom=MSDN

Vous pouvez fixer cet attribut à l’aide de Powershell via la commande ci-dessous (en prenant soin de remplacer « Mathieu » par le nom de votre utilisateur) :

Get-ADUser Mathieu | Set-ADUser -Replace @{‘preferredLanguage’=”en-US”}

Ou alors en important un fichier csv pour une modification en masse, exemple de code ci-dessous.

# Import Csv and Set PreferredLanguage Attribute for each user
Import-csv C:\Temp\ToFixed.csv | foreach {
    $SamAccountName = $_.SamAccountName
    $Attribute = $_.Attribute
    Try {
        # Modifying PreferredLanguage Attribute
        Set-ADUser -Identity $SamAccountName -Replace @{‘preferredLanguage’=$Attribute} -ErrorAction Stop 
        }
    Catch {
        $SamAccountName | Add-Content C:\temp\ErrorPreferredLanguage.txt
        }
    # Release
    $SamAccountName = $null
    $Attribute = $null
    }

 

PowerShell – Créer une fonction de génération de mot de passe

La génération de mots de passe dans un script est un besoin fréquent lors de création de compte utilisateur. Au lieu d’appeler les cmdlets pour générer un mot de passe aléatoire à chaque besoin, il est plus esthétique de créer une fonction de génération de mots de passe dédiée et de l’utiliser quand le besoin se présente.

Le code suivant propose une fonction de génération de mots de passe qui essaye d’être simple, compréhensible et adaptative.

 

La fonction de génération de mots de passe

function New-RandomPassword #Fonction qu'il faudra appeler pour générer un mot de passe aléatoire
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$false)] #Indique que ce paramètre n'est pas obligatoire
        [ValidateNotNullOrEmpty()] #Indique que ce champ ne peut pas être vide ou null
        [int]$PasswordLength = 16, #Paramètre optionel qui spécifie la longueur du mot de passe, valeur par défaut 16

        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [int]$NumberOfAlphaNumericCharacters = 2, #Paramètre optionnel qui spécifie le nombre de caractères alphanumériques que le mot de passe doit contenir, valeur par défaut 2

        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [switch]$ConvertToSecureString #Paramètre qui si présent convertit le mot de passe en secure string pour pouvoir construire un PSCredential Object utile par exemple pour exécuter des cmdlets avec un compte de service 
    )

    Begin
    {
        Add-Type -AssemblyName 'System.Web' # Ajout d'une classe .NET à la session PowerShell qui permet d'accéder aux fonctions nécessaires à la génération du mot de passe
        
        $Return = @{} #Tableau de retour qui contient le mot de passe en clair et le mot de passe sous forme de secure string 
    }

    Process
    {
        $Password = [System.Web.Security.Membership]::GeneratePassword($PasswordLength,$NumberOfAlphaNumericCharacters) #Génération du mot de passe en clair avec les paramètres fournis
        $Return.passwordObject = $Password #Attribution du mot de passe généré dans la variable de sortie de la fonction

        if ($ConvertToSecureString.IsPresent) #Si le paramètre ConvertToSecureString est présent, génère une secure string du mot de passe
        {
            $Password = ConvertTo-SecureString -String $Password -AsPlainText -Force #Génération de la secure string du mot de passe
            $Return.passwordSecureObject = $Password #Attribution de la secure string du mot de passe dans la variable de sortie de la fonction
        }

        Return $Return #Retourne le mot de passe ainsi que la secure string en sortie de la fonction
    }
}

 

 

 

Exemple d’utilisation de la fonction de génération de mots de passe

. .\New-RandomPassword_article.ps1 #Permet de déclarer (dot source) la fonction de génération de mots de passe pour qu'elle puisse être utilisée

$Password = New-RandomPassword -PasswordLength 20 -ConvertToSecureString #Appelle de la fonction de génération de mots de passe
#Avec génération d'une secure string du mot de passe et une longueur de mot de passe de 20 caractères

$Password.passwordObject #Le mot de passe en clair est dans l'attribut passwordObject de la variable de sortie définit ci-avant $Password
$Password.passwordSecureObject #Le mot de passe sous forme de secure string est dans l'attribut passwordSecureObject de la variable de sortie définit ci-avant $Password

 

Le résultat


Appel du script PowerShell Call_me_maybe.ps1 ci-avant

PS D:\Hey_Im_a_folder> .\Call_me_maybe.ps1
LmcfY>5O$-GZ^z/fvfB1 #Affichage du mot de passe en clair
System.Security.SecureString #Mot de passe sous forme de secure string