PowerShell pour la fixation des formats de numéro de téléphone (partie 1) Peter m'a envoyé un e-mail semaine dernière a proposé un billet de blog. «Vous avez mentionné inhttp: / / blogs.technet.com/jamesone/archive/2007/02/21/the-campaign-for-real-numbers.aspx une règle de transport qui serait génial. Whislt je suis toujours sur E2K7 utilisateur , ce serait bien si on pouvait appeler un script PowerShell pour créer la règle et la publier sur votre blog? obtient la valeur de Treble - PowerShell, échange, la distribution et le nombre de ta merde " Je pensais que j'allais essayer de faire trois choses. Réglez les entrées qui se sont accumulés dans ma contactsover temps Outlook qui ne sont pas en E.164 format pour tout ce que je pouvez appeler. Appliquer les corrections des utilisateurs Active Directory et contactez-mêmes des objets [Le bit Peter a suggéré, et ne savent toujours pas comment] Créer une règle de transport dans Exchange 2007 qui déclenche le même effet que ma règle Outlook pour conseiller les gens des numéros ne fonctionnent pas que je dois tirer de l'aide Eileen, pourquoi Brett Orewa. Cet après seulement avec le poing d'entre eux. Je voulais deux fonctions PowerShell. Le premier prend une chaîne contenant le numéro de téléphone et ré-il formats. Number-format numéro de fonction-as-E164 (string [] $ nombre) (if ($ number.length GT-5) (if ($ number.substring (0.2)-ne '08 ') (if ($. Substring ( 0.2)-eq "00") ($ number = '+' + $ number.substring (2)) if ($ number.substring (0,1)-eq "0") (nombre $ nombre = '44 '+ $. substring (1)) $ number = $ number.replace ( "440", numéro "44") $ = $ number.replace ( "44 0", "44") Numéro de number.replace $ = $ (+44 ( number.replace 0) ", numéro" 44 ") $ = $ (+44 (0)", numéro "44") $ = $ number.replace (number.replace +44 (0 "," 44 ( ") $ number = $ ( "+44 (0", "44 ("))) $ number)
La logique est simple: ignorer une chose que les coupures dans un numéro de téléphone et les codes spéciaux, comme 0800, 0870, 0845, (le plus souvent) ne peut être transmise de l'extérieur du Royaume-Uni. Réparer n'importe quoi, où je suis entré le code internationales locales. 001 (234) 555-1234 devient +1 (234) 555-1234 et le numéro de format britannique O118 909 3080 devient 44 118 909 3080. Enfin, se débarrasser de 0 à 44 0118, +44 (0) 118 et 44 (0118) La deuxième fonction prend un objet de contacts Outlook et les premiers appels pour chacun des 13 numéros de téléphone différents - je montre qu'un seul. Format du rôle de contact-as-E164 ($ contact) (Si (contact.CompanyMainTelephoneNumber $) ($ temp = format-number-as-E164 ($ contact.CompanyMainTelephoneNumber) if ($ temp-ne $ contact.CompanyMainTelephoneNumber) (contact.CompanyMainTelephoneNumber $ = $ temp = $ $ changé TRUE) ) if ($ modifier) (write-host $ $ contact.fileAs changé contact.save ()))
Alors maintenant, je nourrir mes contacts Outlook dans cette fonction pour convertir le code que j'ai utilisé pendant des années me donne cette - Obtenez le dossier par défaut pouvez obtenir votre boîte de réception, calendrier, contacts, etc. 10 est le code du dossier de contacts. Outlook $ = New-Object-ComObject "Outlook.Application" namespace = $ Dutlook.GetNamespace ( "MAPI") $ = $ NameSpace.GetDefaultFolder MyContacts (10). Nom Bien entendu, ceci peut être compressé en une seule ligne. MyContacts $ = (new object ComObject "Outlook.Application"). getNamespace ( "MAPI"). GetDefaultFolder (10) Je n'ai pas essayé car je suppose que vous pourriez faire sans la variable entièrement et mettre à jour mon carnet d'adresses avec les foreach ($ element (New-Object ComObject "Outlook.Application" getNamespace). ( "MAPI"). GetDefaultFolder (10). items) (Formulaire de contact-as-E164 ($ item)) Puisque je ne fais pas confiance mon code pour les travaux de la première fois (ou devrait) J'ai fait deux choses à vérifier cela a fonctionné correctement. La première était de faire une substitution globale de ($ contact. Avec (write-host afin que vous puissiez voir ce qu'il faisait - PowerShell syntaxe est CompanyMainTelephoneNumber write-host = $ temp = CompanyMainTelephoneNumber traité comme une chaîne littérale et d'élargir la variable $ temp . Là où cela est scandaleux (au moins pour les nouveaux convertis), mais c'est exactement ce que je veux. Quand j'étais convaincu que cela fonctionnait correctement, j'ai changé le code de retour et testé un contact que je savais que je pouvais corriger si invoquant simplement Formulaire de contact-as-E164 ($ myContacts.Items.item (1)) que quand il travaillait, il était temps d'y aller et mettre à jour tous les contacts avec les pays concernés foreach ($ élément dans myContacts.Items $) (Format de contact-as-E164 ($ item)) Il a travaillé. (UF). J'ai connecté l'. Ps1 fichier avec le code. Comme avec tous les codes publiés sur ce blog sont fournis à titre d'exemple. Qui ne représentent pas nécessairement les «meilleures pratiques» et est fourni sans aucune garantie ou de soutien (donc si vous souhaitez utiliser des données réelles de votre compte, prenez les précautions qui s'imposent).
0 评论:
发表评论