PowerShell para fijar los formatos de número de teléfono

PowerShell para fijar los formatos de número de teléfono (parte 1) Peter me envió un correo electrónico la semana pasada sugiere una entrada de blog. "Usted ha mencionado inhttp: / / blogs.technet.com/jamesone/archive/2007/02/21/the-campaign-for-real-numbers.aspx que una regla de transporte sería genial. Whislt no estoy todavía un E2K7 de usuario, no sería bueno si pudiera llamar una secuencia de comandos PowerShell para crear la regla y publicarlo en tu blog? obtiene el valor de agudos - PowerShell, el intercambio, distribución y número de teléfono de mierda " Pensé que iba a tratar de hacer tres cosas. Fijar las entradas que se han acumulado en mi tiempo contactsover Outlook que no están en formato E.164 para todo lo que tengo se puede marcar. Aplicar las correcciones del mismo usuario de Active Directory y en contacto con objetos [El bit Peter sugieren, y no sé cómo hacerlo todavía] Crear una regla de transporte de Exchange 2007 que dispara el hace lo mismo que mi regla de Outlook para asesorar a las personas de los números no funcionan Deseo que tenga que tirar en la ayuda de Eileen , orEwan Brett por eso. Este post sólo trata con el puño de los mismos. Yo quería dos funciones PowerShell. El primero toma una cadena que contiene el número de teléfono y volver a los formatos de ella. Número de función format-number-como-E164 (string [] $ numero) (if ($ number.length GT-5) (if ($ number.substring (0,2)-ne '08 ') (if ($. substring (0,2)-eq "00") ($ numero = '+' + $ number.substring (2)) if ($ number.substring (0,1)-eq "0") ($ numero = ' 44 '+ $ number.substring (1)) $ numero = $ number.replace ( "440", número "44") $ = $ number.replace ( "44 0", "44") $ number.replace número = $ ( "+44 (0)", número "44") $ = $ number.replace ( "+44 (0)", número "44") $ = $ number.replace ( " number.replace +44 (0 "," 44 ( ") $ numero = $ (" +44 (0 "," 44 ( "))) $ number)
La lógica es muy simple: ignorar algo que corta a un número de teléfono y códigos especiales, como 0800, 0870, 0845, que (en su mayoría) no puede ser marcado desde fuera del Reino Unido. Arreglar cualquier cosa, donde he introducido el código local de internacional. 001 (234) 555-1234 se convierte en +1 (234) 555-1234 y el Reino Unido formato números O118 909 3080 se convierte en +44 118 909 3080. Por último, deshacerse de 0 a 44 0118, +44 (0) 118 y 44 (0118) La segunda función toma un objeto de contacto de Outlook y las primeras convocatorias para cada uno de los 13 números de teléfono distintos - aquí sólo estoy mostrando uno. Formato de la función de contacto-como-E164 ($ contacto) (If ($ contact.CompanyMainTelephoneNumber) ($ temp = format-number-como-E164 ($ contact.CompanyMainTelephoneNumber) if ($ temp-ne $ contact.CompanyMainTelephoneNumber) (contact.CompanyMainTelephoneNumber $ = $ temp = $ $ cambiado TRUE) ) if ($ modificar) (write-host contact.fileAs $ $ cambiado contact.save ()))
Así que ahora tengo que alimentar a mis contactos de Outlook en esta función de convertir el código que he estado utilizando durante años me da este - Obtener la carpeta por defecto puede obtener su bandeja de entrada, calendario, contactos, etc. 10 es el código de la carpeta de contactos. $ Outlook = New-Object-ComObject "Outlook.Application" espacio de nombres = $ outlook.GetNamespace ( "MAPI") MyContacts $ = $ EspacioDeNombres.GetDefaultFolder (10). Nombre Por supuesto, esto puede ser comprimida en una sola línea. MyContacts $ = (nuevo objeto ComObject "Outlook.Application"). getnamespace ( "MAPI"). GetDefaultFolder (10) Yo no lo he probado por Supongo que se podría prescindir de la variable por completo y actualizar mi libreta de direcciones con la foreach ($ elemento (nuevo-objeto ComObject "Outlook.Application" getnamespace). ( "MAPI"). GetDefaultFolder (10). items) (Formato de contacto-como-E164 ($ item)) Como yo no confío en mi código para trabajar por primera vez (ni debe) hice dos cosas, para comprobar que funcionaba correctamente. El primero era hacer una sustitución global de ($ contacto. con (write-host para poder ver lo que estaba haciendo - sintaxis PowerShell es que write-host CompanyMainTelephoneNumber = $ temp = CompanyMainTelephoneNumber tratará como una cadena literal y ampliar la variable $ temp.There casos en que esto es indignante (por lo menos para los nuevos conversos), pero aquí es exactamente lo que quiero. Cuando yo estaba convencido de que estaba trabajando correctamente, he cambiado el código de vuelta y puso a prueba un contacto que yo sabía que podía arreglar por lo que acaba de invocar Formato de contacto-como-E164 ($ myContacts.Items.item (1)) que cuando trabajaba , ya era hora de ir por ella y actualizar todos los contactos con los afectados foreach ($ elemento en $ myContacts.Items) (Formato de contacto-como-E164 ($ item)) Funcionó. (Uf). He conectado el. Ps1 archivo con el código. Al igual que con todo el código publicado en este blog se proporciona como un ejemplo. Que no necesariamente representan las "mejores prácticas" y viene con ninguna garantía o soporte (así que si quieres usarlo con los datos reales de su cuenta, tomar las precauciones adecuadas).

0 评论:

发表评论