четверг, 14 марта 2013 г.

Создание подписей Outlook при помощи Windows PowerShell по шаблону

Скрипт:

#Стартуем скрипт в режиме x86
if ($env:Processor_Architecture -ne "x86")
{ write-warning 'Стартуем PowerShell x86'
&"$env:windir\syswow64\windowspowershell\v1.0\powershell.exe" -NonInteractive -NoProfile -File $myinvocation.Mycommand.path -ExecutionPolicy bypass
#Основные переменные 
$TemplateName = 'CorpSignature'
$DomainName = 'biopharmaceutic'
$SigSource = "\\$DomainName\netlogon\Signatures"
$DefaultAddress = "Wall Street"
$DefaultPOBox = '666'
$DefaultCity = 'Central City'
$DefaultTelephone = '911'
$DefaultFax = '912'
   
#Переменные для локального и удаленного расположения подписи
$AppData=(Get-Item env:appdata).value 
$SigPath = '\Microsoft\Signatures' 
$LocalSignaturePath = $AppData+$SigPath 
$RemoteSignaturePathFull = $SigSource+'\'+$TemplateName+'.docx'
$fullPath = $LocalSignaturePath+'\'+$TemplateName+'.docx'
   
#Получаем информацию для текущего пользователя из Active Directory
$UserName = $env:username
$Filter = "(&(objectCategory=User)(samAccountName=$UserName))"
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.Filter = $Filter
$ADUserPath = $Searcher.FindOne()
$ADUser = $ADUserPath.GetDirectoryEntry()
$ADDisplayName = $ADUser.DisplayName
$ADTitle = $ADUser.title
$ADCompany = $ADUser.company
$ADStreetAddress = $ADUser.streetaddress
$ADPOBox = $ADUser.postofficebox
$ADCity = $ADUser.l
$ADTelePhoneNumber = $ADUser.TelephoneNumber
$ADFax = $ADUser.facsimileTelephoneNumber
$ADMobile = $ADUser.mobile
$ADWebSite = $ADUser.wWWHomePage
$ADEmailAddress = $ADUser.mail

#Копируем файл, если таковой отсутствует в целевой папке или если его хэш отличается от исходного
If (!(Test-Path -Path $fullPath)) {
Copy-Item $RemoteSignaturePathFull $LocalSignaturePath -Recurse -Force 
}
Else {
$Rem = Get-FileHash $RemoteSignaturePathFull -Algorithm SHA256 
$loc = Get-FileHash $fullPath -Algorithm SHA256
Write-Host $Rem.Hash
Write-Host $loc.Hash
If ($Loc.Hash -ne $Rem.Hash)
{
Copy-Item $RemoteSignaturePathFull $LocalSignaturePath -Recurse -Force 
Write-Host "КОПИРУЮ"
} Else {
Write-Host "ХЭШИ СОВПАДАЮТ"}
}

$ReplaceAll = 2
$FindContinue = 1
$MatchCase = $False
$MatchWholeWord = $True
$MatchWildcards = $False
$MatchSoundsLike = $False
$MatchAllWordForms = $False
$Forward = $True
$Wrap = $FindContinue
$Format = $False
     
#Начинаем вытягивать данные из Active Directory
[Void] [Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Interop.Word")
$WordTmpl = New-Object -comObject Word.Application
$WordTmpl.Visible = $True 
$objDoc = $WordTmpl.Documents.Open($fullPath)
$objSelection = $WordTmpl.Selection

#Определяем имя
$Bookmark = "displayName"  
$ReplaceText = $ADDisplayName
$RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range 
$RangeNew.Text = $ReplaceText
    
    #Определяем должность
    $Bookmark = "title"  
    $ReplaceText = $ADTitle
    $RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range 
    $RangeNew.Text = $ReplaceText 
    
    #Название компании
    $Bookmark = "company"  
    $ReplaceText = $ADCompany
    $RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range 
    $RangeNew.Text = $ReplaceText 
    
    #Адрес пользователя с проверкой на заполнение атрибута
 $Bookmark = "streetAddress"
 If ($ADStreetAddress.ToString() -eq '') { 
  $ReplaceText = $DefaultAddress
 } Else {
        $ReplaceText = $ADStreetAddress.ToString()
 }
  $RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range 
        $RangeNew.Text = $ReplaceText

    #Почтовый ящик пользователя с проверкой на заполнение атрибута
 $Bookmark = "postOfficeBox"
 If ($ADPOBox.ToString() -eq '') { 
  $ReplaceText = $DefaultPOBox
 } Else {
  $ReplaceText = $ADPOBox.ToString()
 }
        $RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range 
        $RangeNew.Text = $ReplaceText

    #Город пользователя с проверкой на заполнение атрибута
 $Bookmark = "l"  
 If ($ADCity.ToString() -eq '') { 
  $ReplaceText = $DefaultCity
 } Else {
  $ReplaceText = $ADCity.ToString()
 }
  $RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range 
        $RangeNew.Text = $ReplaceText

    #Рабочий телефон с проверкой на заполнение атрибута
 $Bookmark = "telephoneNumber"  
 If ($ADTelePhoneNumber.ToString() -eq '') { 
  $ReplaceText = $DefaultTelephone
 } Else { 
        $ReplaceText = $ADTelePhoneNumber.ToString()
 }
  $RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range 
        $RangeNew.Text = $ReplaceText 

    #Номер факса с проверкой на заполнение атрибута
    $Bookmark = "facsimileTelephoneNumber"
    If ($ADFax.ToString() -eq '') {
        $ReplaceText = $DefaultFax
    } Else {
        $ReplaceText = $ADFax.ToString()
    }
    if ($objDoc.Bookmarks.Exists($Bookmark)) {
        $RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range 
        $RangeNew.Text = $ReplaceText
    } 

    #Номер мобильного, учитывая то, что в тексте 2 раза упоминается mobile
    $FindText = "099"
    $ReplaceText = $ADMobile.ToString()
    $objSelection.Find.Execute($FindText,$MatchCase, $MatchWholeWord,$MatchWildcards,$MatchSoundsLike, $MatchAllWordForms,$Forward,$Wrap,$Format, $ReplaceText,$ReplaceAll)

    #Веб-сайт пользователя
    $Bookmark = "wWWHomePage"  
    $ReplaceText = $ADWebSite.ToString()
    $RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range 
    $Url = $objDoc.Hyperlinks.Add($RangeNew,$ReplaceText)

    #E-mail пользователя
    $Bookmark = "mail"  
    $ReplaceText = $ADEmailAddress.ToString()
    $RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range 
    $Email = $objDoc.Hyperlinks.Add($RangeNew,'mailto:'+ $ReplaceText)
 
 Write-Host 'Начинаем сохранять подписи'
   
 #Сохраняем в HTML
 $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatHTML");
 $path = $LocalSignaturePath+'\'+$TemplateName+".htm"
 $WordTmpl.ActiveDocument.saveas([ref]$path, [ref]$saveFormat)
 
 #Сохраняем в RTF 
 $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatRTF");
 $path = $LocalSignaturePath+'\'+$TemplateName+".rtf"
 $WordTmpl.ActiveDocument.SaveAs([ref] $path, [ref]$saveFormat)
   
 #Сохраняем в TXT    
 $saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatText");
 $path = $LocalSignaturePath+'\'+$TemplateName+".txt"
 $WordTmpl.ActiveDocument.SaveAs([ref] $path, [ref]$SaveFormat)
 $WordTmpl.ActiveDocument.Close()
 $WordTmpl.Quit() 
} 
exit

Источник: http://gpo-planet.com/?p=4246

Комментариев нет:

Отправить комментарий