PI Services

Le blog des collaborateurs de PI Services

Exchange 2013/2016 - Configuration de plusieurs répertoires virtuels OWA/ECP

Vous pouvez ajouter des répertoires virtuels OWA/ECP supplémentaires pour les raisons suivantes :

  • Vous souhaitez séparer l'accès ECP administrateur et utilisateur pour empêcher l'accès au Centre d'administration Exchange à partir d'Internet.
  • Vous avez différents utilisateurs au sein d'une même organisation qui ont besoin d'une expérience OWA différente, comme un accès aux fichiers public/privé différent ou d'autres fonctionnalités de stratégie ou de segmentation.

Microsoft supporte l'utilisation de plusieurs répertoires virtuels Outlook Web App (OWA) et Exchange Control Panel/Admin Center (ECP) sur un serveur Exchange 2013/2016 lorsque chacun a son propre site Web et est nommé "OWA" et "ECP". Chaque répertoire virtuel doit être à l'écoute sur le port TCP 443 standard pour le site.

Vous devez vous assurer que le site Web par défaut est défini sur "Toutes non attribuées" pour les adresses IP, sinon des problèmes surviendront avec PowerShell.

Ci-dessous les instructions pour la création et la configuration des répertoires virtuels OWA/ECP sur Exchange 2013/2016.

  1. Ajoutez une adresse IP secondaire au serveur - cela peut être avec une autre carte réseau ou simplement en ajoutant une adresse IP à une carte réseau existante.
  2. Si vous avez ajouté une carte réseau, dans les propriétés de la carte, décochez « "enregistrer les adresses de cette connexion dans le système DNS" 
  3. Créez le site Web supplémentaire dans IIS dans un nouveau dossier racine (C:\inetpub\OWA_SECONDARY) et liez-le à la nouvelle adresse IP.
  4. Activez SSL en choisissant le certificat à utiliser pour ce site.
  5. Accordez au groupe IIS_IUSRS l'autorisation de lecture et d'exécution sur le dossier C:\inetpub\OWA_SECONDARY.
  6. Copiez le contenu du dossier racine du site Web par défaut dans son intégralité, y compris les sous-dossiers, dans le nouveau dossier racine du site (c'est-à-dire copiez le contenu %SystemDrive%\inetpub\wwwroot\ dans C:\inetpub\OWA_SECONDARY).
  7. Créez de nouveaux sous-dossiers OWA et ECP dans le dossier racine de votre nouveau site Web (C:\inetpub\OWA_SECONDARY\OWA, C:\inetpub\OWA_SECONDARY\ECP).
  8. Copiez l'intégralité du contenu des dossiers OWA et ECP du site Web par défaut, y compris les sous-dossiers, dans les nouveaux sous-dossiers du nouveau site Web. (Copié à partir de C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy).
  9. Exécutez ce qui suit (en remplaçant <Server> par le nom de votre serveur;
    New-OwaVirtualDirectory -Server <Server> -Role ClientAccess -WebSiteName OWA_SECONDARY -Path "C:\inetpub\OWA_SECONDARY\OWA"
    New-EcpVirtualDirectory -Server <Server> -Role ClientAccess -WebSiteName OWA_SECONDARY -Path "C:\inetpub\OWA_SECONDARY\ECP"
  10. Exécutez les commandes suivantes;
    Set-OwaVirtualDirectory -Identity "<serveur>\owa (site Web par défaut)" -FormsAuthentication $false -WindowsAuthentication $true
    Set-EcpVirtualDirectory -Identity "<serveur>\ecp (site Web par défaut)" -FormsAuthentication $false -WindowsAuthentication $true
  11. Effectuez un IISReset.

L'installation de CU ne mettra PAS à jour correctement les fichiers du site Web secondaire OWA ou ECP, et le site secondaire ne fonctionnera pas correctement. La seule solution prise en charge consiste à supprimer les Vdirs secondaires et le site Web et refaire toutes les étapes. Alors, assurez-vous d'avoir noté tous les paramètres non définis par défaut que vous aviez sur le site, puis supprimez les Vdirs, supprimez le site Web, supprimez tout contenu des dossiers et recommencez à l'étape 3 indiquée ci-dessus. Recréez le site Web, recréez les Vdirs, copiez les derniers fichiers et réappliquez toute configuration ou paramètre personnalisé que vous avez précédemment appliqué. Ne sautez aucune étape et ne prenez aucun raccourci.

Microsoft Exchange - les OUs ne s'affichent pas lors de la création d'une nouvelle BAL depuis l'EAC

Exchange Server 2013/2016 n’affiche pas la liste complète des unités d’organisation lors de la création d’une boîte aux lettres depuis la console d'administration Exchange.

RAISON:

  • Par défaut, l'ensemble de résultats du sélecteur d'unité d'organisation contient 500 entrées uniquement.
  • Lorsqu’il y a plus de 500 entrées, une nouvelle fenêtre est générée et cette fenêtre est vide ou contient un message (il existe d’autres éléments à afficher dans cet affichage).
  • Le sélecteur d'unité d'organisation n'interroge pas Active Directory avec -ResultSize Unlimited.

RESOLUTION:
Pour résoudre ce problème, suivez les étapes suivantes :

  1. Déterminez le nombre d’utilisateurs sur Exchange Server de boîtes aux lettres. Pour ce faire, exécutez la commande suivante (Get-OrganizationalUnit -ResultSize unlimited).count
  2. Sur le Exchange Server de boîtes aux lettres, allez dans le dossier suivant "C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\ecp"
  3. Ajoutez les lignes suivantes dans le fichier web.config juste au-dessus </appsettings> 

<!-- allows the OU picker when placing a new mailbox in its designated organizational unit to retrieve all OUs - default value is 500 -->
<add key="GetListDefaultResultSize" value="2000" />

 

4. Dans le Gestionnaire IIS, redémarrez le pool d’applications MSExchangeECPAppPool.

 Notes:

  • La valeur de GetListDefaultResultSize la clé doit dépasser le nombre d’utilisations trouvées à l’étape 1.
  • Vous devez modifier le fichier web.config sur tous les serveurs mailbox
  • Vous devez ajouter cette valeur chaque fois que vous installez une mise à jour cumulative.

Comment réduire la taille des boîtes aux lettres de découverte dépassant la limite de 50 Go

Les boîtes aux lettres de découverte dans Exchange sont utilisées pour stocker les résultats de recherche eDiscovery.

La taille maximale des boîtes aux lettres de découverte est 50 Go. Il est possible d'augmenter le quota à plus de 50 Go, mails il faut prendre en considération les limites suivantes:

  • Elles ne sont pas prises en charge.

  • Elles ne peuvent pas être migrés vers Microsoft Office 365.

  • S’il s'agit des boîtes aux lettres de découverte Exchange Server 2010, elles ne peuvent pas être mises à niveau vers des versions ultérieures.

Pour résoudre ce problème, vous pouvez créer plusieurs boites aux lettres eDiscovery et copier les résultats de la recherche de la grande boîte aux lettres de découverte dans les nouvelles:

  • Créer la boîte aux lettres de découverte via la commande:

New-Mailbox -Name <discovery mailbox name> -Discovery

Afin d'accéder à cette boîte aux lettres de découverte et visualiser les résultats de la recherche, attribuer des autorisations à un utilisateur ou à un groupe:

Add-MailboxPermission <discovery mailbox name> -User <name of user or group> -AccessRights FullAccess -InheritanceType all

  • Copier les résultats de la recherche dans une boîte aux lettres de découverte en créant tout d'abord une recherche de découverte:

New-MailboxSearch -Name "Search results from 2019" -SourceMailboxes "Discovery Search Mailbox" -StartDate "01/01/2019" -EndDate "12/31/2019" -TargetMailbox "Discovery Mailbox Backup 01" -EstimateOnly -StatusMailRecipients admin@contoso.com

puis démarrer la via la commande:

Start-MailboxSearch "Search results from 2019"

Si besoin régler la plage de dates pour augmenter ou diminuer le nombre de résultats de recherche renvoyés et copier les résultats dans la boîte aux lettres de découverte cible:

Set-MailboxSearch "Search results from 2019" -EstimateOnly $false

Start-MailboxSearch "Search results from 2019"

  • Supprimer les recherches de la boîte aux lettres de découverte d'origine afin de réduire sa taille

Remove-MailboxSearch -Identity <name of search>

Avant de supprimer une recherche, identifier la taille des résultats de recherche qui ont été copiés dans une boîte aux lettres de découverte via l'exécution de la commande:

Get-MailboxSearch | Format-List Name,TargetMailbox,ResultSizeCopied

Exchange: Could not find any available Global Catalog in forest and Event ID 2112

L'exécution des commandes dans un powershell Exchange montre des erreurs " Could not find any available Global Catalog in forest.."

Le journal d'évènement "Application" montre l'avertissement dessous:

Cet événement d'avertissement indique que l'autorisation «Gérer le journal d'audit et de sécurité» a été supprimée pour le groupe "serveurs Exchange" sur les contrôleurs de domaine.

Pour résoudre ce problème:

  1. Ouvrez la console de Gestion des stratégies de groupe (Démarrer / Exécuter / GPMC.MSC)
  2. Développez "Domaines", "Domain Controllers" et cliquez avec le bouton droit de la souris sur "Default Domain Controllers Policy" puis "modifier"
  3. Accédez au menu "Configuration de l'ordinateur", "Stratégies", "Paramètres Windows", "Paramètres de sécurité", "Stratégies locales" et double-cliquez sur "Attribution des droits d'utilisateur"
  4. Dans le volet des résultats, double-cliquez sur "Gérer le journal d'audit et de sécurité" et vérifiez que le groupe "Serveurs Exchange" est répertorié ou l'ajouter le cas échéant. 

Par défaut, le seul groupe du domaine avec ce droit est le groupe Administrateurs mais le processus /preparedomain pour la préparation à l'installation Exchange accorde ce privilège aux serveurs Exchange.

 

 

Erreur installation de correctif: L'assistant d'installation pour la mise à jour de sécurité Exchange s'est terminé prématurément

Lors de l'installation d'un correctif de sécurité pour Exchange Server 2016, l'erreur suivante a été rencontrée « Setup Wizard for Security Update for Exchange Server 2016 cumulative Update…. ended prematurely »

L'erreur est due à une installation incomplète qui a entraîné la désactivation des services messagerie.

Résolution:

  • Définir les services Exchange sur Automatique et démarrer-les:

Get-Service -Name MSE* | Set-Service -StartupType Automatic
Set-Service -Name MSExchangeImap4 -StartupType Disabled
Set-Service -Name MSExchangeIMAP4BE -StartupType Disabled
Set-Service -Name MSExchangePop3 -StartupType Disabled
Set-Service -Name MSExchangePOP3BE -StartupType Disabled
Write-Host "Starting Services..."
Get-Service -Name MSE* | where {$_.StartType -ne "Disabled"} | Start-Service

  • Démarrer aussi les autres services dépendants comme IIS, Search, etc
  • Exécuter le fichier de correctif cumulatif dans une invite de commande avec l'option « Exécuter en tant qu'administrateur ». Ceci donnera au programme d'installation l'autorisation nécessaire pour installer le correctif avec succès.

--> L'activation et le démarrage des services conduisent à une installation réussie de la mise à jour de sécurité.

Nouveau module Exchange atténuant automatiquement les failles critiques

Microsoft a intégré un nouveau module à Exchange qui mettra en place automatiquement les mesures d'atténuation lorsqu'une nouvelle faille de sécurité est dévoilée. Ce nouveau composant se nomme "Microsoft Exchange Emergency Mitigation (EM)"

Les CU22 and CU11 pour Exchange 2016 et 2019 contiennent cette nouvelle fonctionnalité de sécurité supplémentaire :

  • L'idée n'est pas de vous protéger définitivement, mais temporairement, en attendant que vous ayez le temps d'installer le correctif de sécurité. Cela est valable aussi quand Microsoft n'a pas encore sorti le correctif, afin de vous protéger. Retenez que cela ne remplace pas les patchs de sécurité.
  • Cela installe un service Windows Exchange qui vérifie une fois par heure si une atténuation contre une vulnérabilité est disponible et l’installe le cas échéant,
  • Cette fonctionnalité est optionnelle et peut être désactivée
  • Seules les vulnérabilités jugées critiques auront une atténuation.

Le composant EM peut appliquer trois types d'atténuation :

  • Règle de réécriture d'URL dans IIS : Créer une règle pour bloquer les requêtes HTTP sur une URL spécifique
  • Gestion des services Exchange : Désactiver un service Exchange vulnérable
  • Gestion des pools d'applications : Désactiver un pool d'applications vulnérable

 La mise en place de cette nouvelle fonctionnalité nécessite :

    • l'installation du module IIS URL Rewrite, qui s’ajoute désormais aux prérequis systèmes à l’installation/mise à jour d’Exchange.
    • Le serveur doit accéder à l’url https://officeclient.microsoft.com/getexchangemitigations
    • Si Windows Server 2012 R2 est utilisé pour Exchange 2016, il faut installer la KB2999226.

Lors de l'installation/upgrade, il y a un changement d’accord de licence selon si vous souhaitez partager des données de diagnostics avec Microsoft ou non: Le switch /IAcceptExchangeServerLicenseTerms a été remplacé par:

    • /IAcceptExchangeServerLicenseTerms_DiagnosticDataON
    • /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF

Vous pouvez activer/désactiver le partage de des données de diagnostics unitairement par serveur avec la commande :

Set-ExchangeServer -Identity <ServerName> -DataCollectionEnabled $false

Vous pouvez activer/désactiver la fonctionnalité EM au niveau de l’organisation, ou au niveau serveur.

Set-OrganizationConfig -MitigationsEnabled $false

Set-ExchangeServer -Identity <ServerName> -MitigationsEnabled $false

Après l’application d’un Security Update (SU), la mitigation associée est conservée, il faut retirer la mitigation manuellement

- Les activités des mitigations sont logés dans le journal des évènements des serveurs : (source MSExchange Mitigation Service) et dans le répertoire V15\Logging\MitigationService

MECM (SCCM) : Bonnes pratiques pour Windows 10 Servicing Upgrades (mises à jour des fonctionnalités)

Dans un projet de migration de Windows 10 vers une nouvelle version en utilisant les mises à jour de fonctionnalités de Microsoft Endpoint Configuration Manager, il y a quelques bonne pratiques à appliquer pour optimiser le process.

Ci-dessous 4 bonnes pratiques :

1. Définissez les paramètres ci-dessous sur la règle du plan de maintenance pour vous assurer de ne pas avoir de groupe de mise à jour logicielle vide après une synchronisation mensuelle des mises à jour SCCM, où les mises à jour des fonctionnalités sont remplacées (exemple de migration vers Windows 10 1909)

2. Augmentez la durée d'exécution maximale des mises à jour des fonctionnalités de Windows 10, de 120 minutes (valeur par défaut) à 600 minutes pour éviter la corruption de la migration (pour les appareils lents)

3. Définissez un plan de gestion de l'alimentation personnalisé sur les collections d'appareils cibles de migration pour désactiver le mode veille et l'arrêt du disque lorsque l'ordinateur n'est pas sur batterie

  • Assurez-vous que la gestion de l'alimentation est activée dans les paramètres du client

  • Sur une collection contenant tous les ordinateurs cibles pour la migration, définissez un plan personnalisé (ConfigMgr) pour les plans Peak et Non-Peak avec les modifications suivantes :

4. Modifiez les paramètres du client dans l'onglet des mises à jour logicielles comme suit :

  • Calendrier d'analyse des mises à jour logicielles > A lieu toutes les 12h (valeur par défaut : 24h)
  • Planifier la réévaluation du déploiement > A lieu toutes les 12h (valeur par défaut : 24h)
  • Dès que l'échéance d'un déploiement de mise à jour logicielle est atteinte, installer tous les autres déploiement de mise à jour logicielle avec une échéance pendant une période de temps spécifiée > Non (valeur par défaut : Oui)
  • Spécifier la priorité du thread pour les mises à jour des fonctionnalisés > Normal (valeur par défaut : Non configuré)

SCCM - SQL Query - 'Last Enforcement State' pour tout les déploiements/computers.

La requete SQL ci-dessous liste l'état d'application (Enforcement) pour toutes les machines et les deploiements correspondant.

 

/*** SCCM - QUERY TO DISPLAY ALL COMPUTERS 'LAST ENFORCEMENT STATE' FOR ALL DEPLOYMENTS  ***/


DECLARE @StartDate DATETIME, @EndDate DATETIME
	
-- Since 12 months
SET @StartDate = DATEADD(mm, -12,GETDATE())
SET @EndDate = GETDATE() 


SELECT

vrs.Name0,

CASE vrs.Active0
	WHEN 0 THEN 'NO'
	WHEN 1 THEN 'YES'
	END AS Client_Active,

a.AssignmentName as DeploymentName,
a.StartTime as Deploy_Available,
a.EnforcementDeadline as Deploy_Deadline,
sn.StateName as LastEnforcementState,
wsus.LastErrorCode as 'LasErrorCode'


FROM v_CIAssignment a
JOIN v_AssignmentState_Combined assc on a.AssignmentID=assc.AssignmentID
JOIN v_StateNames sn on assc.StateType = sn.TopicType and sn.StateID=isnull(assc.StateID,0)
JOIN v_R_System vrs on vrs.ResourceID = assc.ResourceID
JOIN v_GS_WORKSTATION_STATUS wks on wks.ResourceID = assc.ResourceID
JOIN v_UpdateScanStatus wsus on wsus.ResourceID = assc.ResourceID


AND CreationTime BETWEEN @StartDate AND @EndDate -- IN A SPECIFIC TIME WINDOW FOR THE DEPLOYMENT CREATION TIME

ORDER BY Deploy_Available DESC

 

 

Active Directory - À quels attributs LDAP correspondent les friendly name dans l'AD ?

Vous êtes-vous déjà mordus les doigts dans l'utilitaire de délégation de permissions Active Directory (AD) en essayant désespérément de savoir à quel attribut LDAP correspond tel attribut sous sa forme "friendly" name ?

 

Le tableau de correspondance attribut LDAP et friendly name

 

LDAP_name Friendly_name
c Country Abbreviation
cn Name
co Country
comment Comment
company Company
department Department
description Description
directReports Direct Reports
displayName Display Name
distinguishedName Distinguished Name
division Division
employeeID Employee ID
facsimileTelephoneNumber Fax Number
generationQualifier Generational Suffix
givenName First Name
homeDirectory Home Folder
homeDrive Home Drive
homePhone Home Phone
homePostalAddress Home Address
info Notes
initials Initials
internationalISDNNumber International ISDN Number (Others)
ipPhone IP Phone Number
l City
mail E-Mail Address
manager Manager
memberOf Member Of
middleName Middle Name
mobile Mobile Number
mSDS-PhoneticCompanyName Phonetic Company Name
mSDS-PhoneticDepartment Phonetic Department
mSDS-PhoneticDisplayName Phonetic Display Name
mSDS-PhoneticFirstName Phonetic First Name
mSDS-PhoneticLastName Phonetic Last Name
msRTCSIP-PrimaryHomeServer Office Communications Server
msRTCSIP-PrimaryUserAddress Office Communications Server Address
msRTCSIP-UserEnabled Enabled for Office Communications Server
otherFacsimileTelephoneNumber Fax Number (Others)
otherHomePhone Home Phone Number (Others)
otherIpPhone IP Phone Number (Others)
otherMailbox E-Mail Address (Others)
otherMobile Mobile Number (Others)
otherPager Pager Number (Others)
otherTelephone Phone Number (Others)
pager Pager Number
personalTitle Title
physicalDeliveryOfficeName Office Location
postalCode ZIP/Postal Code
postOfficeBox Post Office Box
primaryInternationalISDNNumber International ISDN Number
primaryTelexNumber Telex Number
samAccountName Logon Name (pre-Windows 2000)
sn Last Name
st State/Province
streetAddress Street Address
telephoneNumber Telephone Number
telexNumber Telex Number (Others)
title Job Title
url Web Page Address (Others)
userPrincipalName Logon Name
userWorkstations Logon Workstations
wWWHomePage Web Page Address

 

Remarque : certains attributs ne sont pas disponibles par défaut dans l'utilitaire de délégation de permission, il faut modifier le fichier dssec.dat sur un contrôleur de domaine

PowerShell - Convertir les signes diacritiques

Un signe diacritique ou diacritique est un élément ajouté à une lettre, par exemple dans la langue française, les biens connus : à, é, ç mais également les ł, ø, ß utilisés dans d'autres langues. La plupart des logiciels ne sont pas capables de traiter les diacritiques correctement ce qui peut avoir pour conséquence une simple gêne utilisateur ou dans le pire des cas des accès non fonctionnels.

Comment alors se débarrasser de ces diacritiques ? Hors de question de les retirer complétement, car ils font partie intégrante des mots, il faut alors essayer de les convertir vers des caractères connus par les logiciels. 

 

La fonction de conversion des diacritiques

function Convert-Diacritic #Fonction qu'il faudra appeler pour convertir le diacritique
{
    [CmdletBinding()] #Déclaration des paramètres qu'il faudra fournir à la fonction pour qu'elle puisse s'exécuter
    Param
    (
        [Parameter(Mandatory=$true)] #Indique que ce paramètre est facultatif
        [ValidateNotNullOrEmpty()] #Indique que ce champ ne peut pas être vide ou null, s'il est obligatoire
        [string]$InputString #Paramètre qui attend la chaîne de caractères qui contient les diacritiques à convertir
    )

    Begin 
    {
        $Return = @{} #Tableau de retour qui contient la chaîne de caractères sans diacritiques
        
        $DiacriticsArray = @{ #Hashtable, aussi appelé tableau de conversion dans ce script, qui contient à droite du signe égal le caractère avec diacritique et à gauche du signe égale, le caractère cible post conversion
            #Par exemple à deviendra a après conversion
            #Pour déterminer vers quel caractère convertir un diacritique, une simple recherche internet peut être utilisé
            a = 'à', 'á', 'â', 'ã', 'ā', 'ă', 'ą'
            aa = 'å'
            ae = 'ä', 'æ'
            c = 'ç', 'ć', 'ĉ', 'ċ', 'č'
            d = 'ď', 'đ'
            e = 'è', 'é', 'ê', 'ë', 'ē', 'ĕ', 'ė', 'ę', 'ě'
            g = 'ĝ', 'ğ', 'ġ', 'ģ'
            h = 'ĥ', 'ħ'
            i = 'ì', 'í', 'î', 'ï', 'ĩ', 'ī', 'ĭ', 'ı', 'į'
            ij = 'ij'
            j = 'ĵ'
            k = 'ķ', 'ĸ'
            l = 'ĺ', 'ļ', 'ľ', 'ŀ', 'ł'
            n = 'ñ', 'ń', 'ņ', 'ň', 'ŋ'
            o = 'ò', 'ó', 'ô', 'õ', 'ō', 'ŏ', 'ő'
            oe = 'ö', 'ø', 'œ'
            r = 'ŕ', 'ŗ', 'ř'
            s = 'ś', 'ŝ', 'ş', 'š'
            ss = 'ß'
            t = 'ţ', 'ť', 'ŧ'
            th = 'þ'
            u = 'ù', 'ú', 'û', 'ũ', 'ů', 'ū', 'ŭ', 'ű', 'ų'
            ue = 'ü'
            w = 'ŵ'
            y = 'ý', 'ÿ', 'ŷ'
            z = 'ź', 'ż', 'ž'
        }
    }

    Process
    {
        $OutputString = $InputString.ToLower() #Transforme tous les caractères majuscules de la chaîne de caractères d'entrée en minuscule
        #Le tableau ne peut convertir que les diacritiques minuscules, cela simplifie également la maintenabilité du tableau de conversion et du code

        foreach ($Letter in $DiacriticsArray.GetEnumerator()) #On parcourt chaque paire lettres/diacritiques du tableau de conversion
        #La méthode GetEnumerator permet de générer deux propriétés Key et Value pour chaque paire du tableau de conversion, ci-après appelé $Letter.Value et $Letter.Key
        {
            $DiacriticsLetter = $Letter.Value #Letter.Value contient l'ensemble des diacritiques d'une paire (ligne) du tableau de conversion
            foreach ($Diacritic in $DiacriticsLetter) #On parcourt chaque diacritique d'une ligne
            {
                if ($OutputString -match $Diacritic) #Si le diacritique qui est en train d'être parcouru est contenu dans la chaîne de caractères d'entrée, le code suivant sera exécuté
                {
                    $OutputString = $OutputString.Replace($Diacritic, $Letter.Key) #Le diacritic qui en train d'être parcouru est remplacé par le caractère cible de conversion contenu dans la propriété $Letter.Key 
                }
            }
        }

        #La boucle précédente va donc répéter les actions décrites précédemment pour chaque paire et chaque diacritique du tableau de conversion

        $Return.outputStringObject = $OutputString #Attribution de la chaîne de caractères sans diacritiques à la variable de sortie
        Return $Return #Retourne la chaîne de caractères sans diacritiques
    }
}

 

Exemple d'utilisation de la fonction de conversion

Le script suivant appelle la fonction de conversion de diacritique lorsque lui-même est appelé

. .\Convert-Diacritic_article.ps1 #Permet de déclarer (dot source) la fonction de conversion de diacritique pour qu'elle puisse être utilisée

$String = Convert-Diacritic -InputString "DébutăîœăßøFin" #Appelle de la fonction de conversion de diacritique et lui passe en paramètre une chaîne de caractères qui contient des diacritiques 

$String.outputStringObject #La chaîne de caractères sans diacritiques est contenu dans la propriété outputStringObject, elle est donc appelée pour afficher le résultat

 

Appel du script précédent

PS D:\A_folder> .\Just_call_me_already.ps1 #Appel du script précédent qui contient l'appelle de la fonction de conversion de diacritique
debutaioeassoefin #Les diacritiques dans la chaîne de caractères ont été convertis selon les règles du tableau de conversion 

 

Remarque : les scripts qui manipulent des diacritiques, tels que les scripts ci-avant, doivent être encodés avec du BOM, par exemple UTF-8 with BOM, sans quoi les diacritiques seront mal convertis par l'IDE (integrated development environment) et empêcheront la bonne exécution du code.