|
Компьютерный форум OSzone.net » Серверные продукты Microsoft » Microsoft Exchange Server » V. 2010 - [решено] Единая подпись Outlook, AD, Powershell, word.application |
|
V. 2010 - [решено] Единая подпись Outlook, AD, Powershell, word.application
|
Новый участник Сообщения: 8 |
Сделал подпись по инструкции с http://habrahabr.ru/sandbox/84137/.
Суть инструкции: сделать сценарий Powershell (вложение Set-OutlookSignature.7z), к нему файл с образцом подписи (вложение company.docx), поставить сценарий в ГП в качестве логон скрипта. Суть скрипта PowerShell - он получает из AD реквизиты, заменят в образце заданный текст на реквизиты из AD и подставляет в Outlook полученный файл в качестве подписи по умолчанию. Но в моем случае поступил запрос в подпись вставить логин скайп, для тех, кто этим скайпом пользуется. Скрытый текст
Логин скайп забил в поле IPPhone в AD. вот мы его получаем: вот мы его заменяем в файле: "$FindText = "IPPhone" $ReplaceText = $ADIPPhone.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll )" Сейчас для решения этой задачи сделал группы в AD "GP_Подпись простая" и "GP_Подпись со скайпом", и две групповые политики, выполняющиеся для этих групп, в одной в файле-образце есть строка "Skipe: IPPhone", в другом нет. Задача решена, но не красиво, тем более, что от меня хотят включение строки icq для тех, кто им пользуется, а это значит еще и третью политику городить. Я бы хотел, чтобы Групповая политика была одна, а скрипт удалял в случае ненужности строку. Как логический вариант решения вижу поставить в образце вместо строки: "Skype{табуляция}{табуляция}IPPhone" просто строку "IPPhone" Искать текст: {символ нового абзаца}IPPhone и заменять на если $ADIPPhone пустое - на пустоту в ином случае на: Но в программировании и написании скриптов я слабоват, вот и не знаю как правильно задачу выполнить. В придуманном мной варианте, не знаю чем заменить символ нового абзаца и табуляции, и вообще будет ли оно работать в таком виде. Быть может найдется, кто может подсказать как это реализовать. |
|
Отправлено: 18:23, 21-05-2015 |
Пользователь Сообщения: 112
|
Профиль | Отправить PM | Цитировать Например так
|
Отправлено: 06:34, 22-05-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать
Цитата:
по тексту не нашел нигде выравнивания текста, вставок табуляции или чего-либо подобного. А также в данном примере все атрибуты являются обязательными, что совершенно не помогает выполнению моей задачи ![]() скрипт из статьи позволяет сделать шаблон и подпись будет ровно того форматирования, что и в шаблоне, с сохранением отступов, шрифтов и проч. Но как убрать строчку из шаблона в случае ненужности не знаю. Если не найду, оставлю тогда так с несколькими групповыми политиками. |
|||||
Отправлено: 10:41, 22-05-2015 | #3 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать код скрипта
#Custom variables $CompanyName = ‘company' $SigSource = "\\Domain.local\SysVol\Domain.local\Policies\{7A1CC634-AB6E-4254-B254-92480ADDAC89}\User\Scripts\Logon\$CompanyName" $ForceSignatureNew = '1' #When the signature are forced the signature are enforced as default signature for new messages the next time the script runs. 0 = no force, 1 = force (1 -установить по умолчанию, 0 - не устанавливать $ForceSignatureReplyForward = '0' #When the signature are forced the signature are enforced as default signature for reply/forward messages the next time the script runs. 0 = no force, 1 = force #Environment variables $AppData=(Get-Item env:appdata).value $SigPath = ‘\Microsoft\Signatures' $LocalSignaturePath = $AppData+$SigPath $LocalSignatureFile = $LocalSignaturePath+'\'+$CompanyName+'.files' $RemoteSignaturePathFull = $SigSource+'\'+$CompanyName+'.docx' #Get Active Directory information for current user $UserName = $env:username $Filter = "(&(objectCategory=User)(samAccountName=$UserName))" $Searcher = New-Object System.DirectoryServices.DirectorySearcher $Searcher.Filter = $Filter $ADUserPath = $Searcher.FindOne() $ADUser = $ADUserPath.GetDirectoryEntry() $ADCName = $ADUser.cn $ADName = $ADUser.givenName $ADSurname = $ADUser.sn $ADEmailAddress = $ADUser.mail $ADTitle = $ADUser.title $ADTelePhoneNumber = $ADUser.TelephoneNumber $ADMobilePhoneNumber = $ADUser.mobile $ADFaxNumber = $ADUser.facsimileTelephoneNumber $ADCompany = $ADUser.company $ADWWW = $ADUser.wWWHomePage $ADDepartment = $ADUser.department $ADIPPhone = $ADUser.ipPhone #Setting registry information for the current user $CompanyRegPath = "HKCU:\Software\"+$CompanyName if (Test-Path $CompanyRegPath) {} else {New-Item -path "HKCU:\Software" -name $CompanyName} if (Test-Path $CompanyRegPath'\Outlook Signature Settings') {} else {New-Item -path $CompanyRegPath -name "Outlook Signature Settings"} $SigVersion = (gci $RemoteSignaturePathFull).LastWriteTime #When was the last time the signature was written $ForcedSignatureNew = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').ForcedSignatureNew $ForcedSignatureReplyForward = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').ForcedSignatureReplyForward $SignatureVersion = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').SignatureVersion Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name SignatureSourceFiles -Value $SigSource #присваиваем переменные взяв значения из реестра $TelephoneNumberREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').TelephoneNumber $NameREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').Name $SurnameREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').Surname $EmailAddressREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').EmailAddress $ADTitleREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').ADTitle $ADMobilePhoneNumberREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').MobilePhone $ADCompanyREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').Company $ADwwwREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').WWW $ADFaxNumberREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').Fax $ADDepartmentREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').Department $ADCNameREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').CName $ADIPPhoneREG = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').IPPhone $SignatureSourceFiles = (Get-ItemProperty $CompanyRegPath'\Outlook Signature Settings').SignatureSourceFiles #Forcing signature for new messages if enabled if ($ForcedSignatureNew -eq '1') { #Set company signature as default for New messages echo >> 1 $MSWord = New-Object -com word.application $EmailOptions = $MSWord.EmailOptions $EmailSignature = $EmailOptions.EmailSignature $EmailSignatureEntries = $EmailSignature.EmailSignatureEntries $EmailSignature.NewMessageSignature = $CompanyName $MSWord.Quit() } #Forcing signature for reply/forward messages if enabled if ($ForcedSignatureReplyForward -eq '1') { #Set company signature as default for Reply/Forward messages $MSWord = New-Object -com word.application $EmailOptions = $MSWord.EmailOptions $EmailSignature = $EmailOptions.EmailSignature $EmailSignatureEntries = $EmailSignature.EmailSignatureEntries $EmailSignature.ReplyMessageSignature = $CompanyName $MSWord.Quit() } #Copying signature sourcefiles and creating signature if signature-version are different from local version $FileExists = Test-Path "$LocalSignatureFile" if ($SignatureVersion -eq $SigVersion -And $ADCNameREG -eq $ADCName -And $ADMobilePhoneNumberREG -eq $ADMobilePhoneNumber -And $ADCompanyREG -eq $ADCompany -and $ADwwwREG -eq $ADWWW -And $ADFaxNumberREG -eq $ADFaxNumber -And $ADDepartmentREG -eq $ADDepartment -And $TelephoneNumberREG -eq $ADTelePhoneNumber -And $NameREG -eq $ADName -And $SurnameREG -eq $ADSurname -And $EmailAddressREG -eq $ADEmailAddress -And $ADIPPhoneREG -eq $ADIPPhone -And $ADTitleREG -eq $ADTitle -and $FileExists -eq $true) {} else { #Copy signature templates from domain to local Signature-folder Copy-Item "$SignatureSourceFiles\*" $LocalSignaturePath -Recurse -Force $ReplaceAll = 2 $FindContinue = 1 $MatchCase = $False $MatchWholeWord = $True $MatchWildcards = $False $MatchSoundsLike = $False $MatchAllWordForms = $False $Forward = $True $Wrap = $FindContinue $Format = $False #Insert variables from Active Directory to rtf signature-file $MSWord = New-Object -com word.application $fullPath = $LocalSignaturePath+'\'+$CompanyName+'.docx' $MSWord.Documents.Open($fullPath) $FindText = "CName" $ReplaceText = $ADCName.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) $FindText = "FaxNumber" $ReplaceText = $ADFaxNumber.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) $FindText = "TelephoneNumber" $ReplaceText = $ADTelephoneNumber.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) $FindText = "MobPhone" $ReplaceText = $ADMobilePhoneNumber.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) $FindText = "Department" $ReplaceText = $ADDepartment.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) $FindText = "Name" $ReplaceText = $ADName.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) $FindText = "Surname" $ReplaceText = $ADSurname.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) $FindText = "Companyname" $ReplaceText = $ADCompany.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) $FindText = "Title" $ReplaceText = $ADTitle.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) $FindText = "IPPhone" $ReplaceText = $ADIPPhone.ToString() $MSWord.Selection.Find.Execute($FindText, $MatchCase, $MatchWholeWord, $MatchWildcards, $MatchSoundsLike, $MatchAllWordForms, $Forward, $Wrap, $Format, $ReplaceText, $ReplaceAll ) $MSWord.Selection.Find.Execute("Email") $MSWord.ActiveDocument.Hyperlinks.Add($MSWord.Selection.Range, "mailto:"+$ADEmailAddress.ToString(), $missing, $missing, $ADEmailAddress.ToString()) $MSWord.Selection.Find.Execute("site") $MSWord.ActiveDocument.Hyperlinks.Add($MSWord.Selection.Range, $ADWWW.ToString(), $missing, $missing, $ADWWW.ToString()) $MSWord.ActiveDocument.Save() $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatHTML"); [ref]$BrowserLevel = "microsoft.office.interop.word.WdBrowserLevel" -as [type] $MSWord.ActiveDocument.WebOptions.OrganizeInFolder = $true $MSWord.ActiveDocument.WebOptions.UseLongFileNames = $true $MSWord.ActiveDocument.WebOptions.BrowserLevel = $BrowserLevel::wdBrowserLevelMicrosoftInternetExplorer6 $path = $LocalSignaturePath+'\'+$CompanyName+".htm" $MSWord.ActiveDocument.saveas([ref]$path, [ref]$saveFormat) $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatRTF"); $path = $LocalSignaturePath+'\'+$CompanyName+".rtf" $MSWord.ActiveDocument.SaveAs([ref] $path, [ref]$saveFormat) $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatText"); $path = $LocalSignaturePath+'\'+$CompanyName+".rtf" $MSWord.ActiveDocument.SaveAs([ref] $path, [ref]$saveFormat) $path = $LocalSignaturePath+'\'+$CompanyName+".txt" $MSWord.ActiveDocument.SaveAs([ref] $path, [ref]$SaveFormat) #::wdFormatText) $MSWord.ActiveDocument.Close() $MSWord.Quit() } #Stamp registry-values for Outlook Signature Settings if they doesn`t match the initial script variables. Note that these will apply after the second script run when changes are made in the "Custom variables"-section. if ($ForcedSignatureNew -eq $ForceSignatureNew){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name ForcedSignatureNew -Value $ForceSignatureNew} if ($ForcedSignatureReplyForward -eq $ForceSignatureReplyForward){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name ForcedSignatureReplyForward -Value $ForceSignatureReplyForward} if ($SignatureVersion -eq $SigVersion){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name SignatureVersion -Value $SigVersion} #проверить актуальность тел. номера if ($TelephoneNumberREG -eq $ADTelePhoneNumber){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name TelephoneNumber -Value $ADTelePhoneNumber} if ($TelephoneNumberREG -eq $ADTelePhoneNumber){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name TelephoneNumber -Value $ADTelePhoneNumber} #проверить актуальность ФИО if ($ADСNameREG -eq $ADСName){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name CName -Value $ADCName} if ($ADCNameREG -eq $ADCName){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name CName -Value $ADCName} #проверить актуальность Имени if ($NameREG -eq $ADName){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name Name -Value $ADName} if ($NameREG -eq $ADName){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name Name -Value $ADName} #проверить актуальность e-mail if ($EmailAddressREG -eq $ADEmailAddress){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name EmailAddress -Value $ADEmailAddress} if ($EmailAddressREG -eq $ADEmailAddress){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name EmailAddress -Value $ADEmailAddress} #проверить актуальность должности if ($ADTitleREG -eq $ADTitle){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name ADTitle -Value $ADTitle} if ($ADTitleREG -eq $ADTitle){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name ADTitle -Value $ADTitle} #проверить актуальность мобильного if ($ADMobilePhoneNumberREG -eq $ADMobilePhoneNumber){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name MobilePhone -Value $ADMobilePhoneNumber} if ($ADMobilePhoneNumberREG -eq $ADMobilePhoneNumber){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name MobilePhone -Value $ADMobilePhoneNumber} #проверить актуальность компании if ($ADCompanyREG -eq $ADCompany){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name Company -Value $ADCompany} if ($ADCompanyREG -eq $ADCompany){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name Company -Value $ADCompany} #проверить актуальность www if ($ADwwwREG -eq $ADWWW){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name WWW -Value $ADWWW} if ($ADwwwREG -eq $ADWWW){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name WWW -Value $ADWWW} #проверить актуальность skype if ($ADIPPhoneREG -eq $ADIPPhone){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name IPPhone -Value $ADIPPhone} if ($ADIPPhoneREG -eq $ADIPPhone){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name IPPhone -Value $ADIPPhone} #проверить актуальность факса if ($ADFaxNumberREG -eq $ADFaxNumber){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name Fax -Value $ADFaxNumber} if ($ADFaxNumberREG -eq $ADFaxNumber){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name Fax -Value $ADFaxNumber} #проверить актуальность отдела if ($ADDepartmentREG -eq $ADDepartment){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name Department -Value $ADDepartment} if ($ADDepartmentREG -eq $ADDepartment){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name Department -Value $ADDepartment} #проверить актуальность фамлиии if ($SurnameREG -eq $ADSurname){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name Surname -Value $ADSurname} if ($SurnameREG -eq $ADSurname){} else {Set-ItemProperty $CompanyRegPath'\Outlook Signature Settings' -name Surname -Value $ADSurname} |
Отправлено: 10:47, 22-05-2015 | #4 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать подумал,другой вариант решения, может сделать три файла шаблона, из скрипта проверять заполнен ли реквизит у пользователя и в соответствии выбирать шаблон, видимо так и сделаю. Кажется так будет красиво, во-первых групповая политика будет одна и скрипт один. И сомнительное для меня место "удаление ненужного текста" обойду.
Сейчас времени нет, в свободное время доведу скрипт до ума. |
|
Отправлено: 15:16, 25-05-2015 | #5 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Сделал, как написал.
Если кого заинтересует, скрипт выложу. Три шаблона, выбирается шаблон в зависимости от наличия/отсутсвия skype, icq. |
Отправлено: 18:32, 25-05-2015 | #6 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать
ну вот готов скриптец,
как тут тему отмечать решенной? Спасибо Всем за помощь. |
||||
Отправлено: 19:03, 25-05-2015 | #7 |
Пользователь Сообщения: 85
|
Профиль | Отправить PM | Цитировать Цитата dopk:
|
|
Отправлено: 16:36, 28-05-2015 | #8 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать как шутка самосмейка
сам вопрос спросил, сам ответил. Но это помогает для мыслительного процесса. |
Отправлено: 18:49, 28-05-2015 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - [решено] Подпись с .jpeg в outlook | pogo | Скриптовые языки администрирования Windows | 3 | 19-11-2014 11:13 | |
VBS/WSH/JS - [решено] Картинка-подпись генерируемая vbs для Outlook | Black_Sun | Скриптовые языки администрирования Windows | 12 | 28-08-2014 15:42 | |
2010 - Убрать подпись в Outlook | Dlovar | Microsoft Office (Word, Excel, Outlook и т.д.) | 4 | 31-05-2013 10:43 | |
PowerShell - [решено] PowerShell AD значение поля | forsem | Скриптовые языки администрирования Windows | 4 | 12-12-2012 10:26 | |
Прочие - Ошибка в Word 2010 Microsoft Visual Basic for Application | akalibr | Microsoft Office (Word, Excel, Outlook и т.д.) | 3 | 06-11-2011 21:53 |
|