mcintosh55 |
24-11-2017 16:07 2779906 |
Не удалось преобразовать значение
Вложений: 1
Для создания уникальной подписи в outlook скрипт дергает данные с AD на некоторых компьютерах консоль сыпет ошибками, ошибки на скриншоте.
powershel скрипт запускаю через gpo через конфигурацию пользователя с помощью cmd ("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy bypass -file "путь к файлу.ps1"). Как преобразовать значение или это касяк из-за того что запускаю из cmd/
http://forum.oszone.net/attachment.p...1&d=1511528733
|
mcintosh55 |
24-11-2017 17:40 2779927 |
подскажите эту часть когда надо добавить в начале кода?
|
mcintosh55 |
27-11-2017 13:23 2780469 |
а можете как то это строку пояснить. Я правильно понял все переменный загнать в массив.
|
Одно из свойств возвращает коллекцию объектов из Active Directory, т.к. в теме нет кода и проблемной строки, то логично, что вставить надо $ReplaceText.
|
mcintosh55 |
29-11-2017 14:40 2780986 |
Код:
#скрипт создает или обновляет подпись в outlook у пользователя
#Стартуем скрипт в режиме 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
#Удаление реестра
Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\office\16.0\common\mailsettings -Name NewSignature
Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\office\16.0\common\mailsettings -Name ReplySignature
#Основные переменные
$TemplateName = 'CorpSignature'
$DomainName = 'puma.com'
$SigSource = "\\$DomainName\netlogon\Signatures"
#Переменные для локального и удаленного расположения подписи
$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 | select -first 1).DisplayName)"
$ADTitle = $ADUser.title
$ADCompany = $ADUser.company
$ADTelePhoneNumber = $ADUser.TelephoneNumber
$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 = $False
$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 = "telephoneNumber"
If ($ADTelePhoneNumber.ToString() -eq '') {
$ReplaceText = $DefaultTelephone
} Else {
$ReplaceText = $ADTelePhoneNumber.ToString()
}
$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 = "mobile"
$ReplaceText = $ADMobile.ToString()
$RangeNew = $objDoc.Bookmarks.Item($Bookmark).Range
$RangeNew.Text = $ReplaceText
#Веб-сайт пользователя
$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()
}
#создания ключей в реестре
New-ItemProperty -Path HKCU:\Software\Policies\Microsoft\office\16.0\common\mailsettings -Name NewSignature -PropertyType ExpandString -Value CorpSignature
New-ItemProperty -Path HKCU:\Software\Policies\Microsoft\office\16.0\common\mailsettings -Name ReplySignature -PropertyType ExpandString -Value CorpSignature
exit
|
Код:
$ADDisplayName = $ADUser.DisplayName[0]
$ADTitle = $ADUser.title[0]
$ADCompany = $ADUser.company[0]
$ADTelePhoneNumber = $ADUser.TelephoneNumber[0]
$ADMobile = $ADUser.mobile[0]
$ADWebSite = $ADUser.wWWHomePage[0]
$ADEmailAddress = $ADUser.mail[0]
|
mcintosh55 |
30-11-2017 04:51 2781138 |
Эту часть кода где нужно поставить? Где получаем данные из AD
|
mcintosh55 |
30-11-2017 16:02 2781240 |
Та же фигня, ладно Я пока забил на этот скрипт отправил бойца пускай физрой позанимался всего на 15 ПК настроить надо остальные подцепили
|
Время: 08:26.
© OSzone.net 2001-