Войти

Показать полную графическую версию : [решено] Не удалось преобразовать значение


mcintosh55
24-11-2017, 16:07
Для создания уникальной подписи в outlook скрипт дергает данные с AD на некоторых компьютерах консоль сыпет ошибками, ошибки на скриншоте.
powershel скрипт запускаю через gpo через конфигурацию пользователя с помощью cmd ("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy bypass -file "путь к файлу.ps1"). Как преобразовать значение или это касяк из-за того что запускаю из cmd/
http://forum.oszone.net/attachment.php?attachmentid=149624&stc=1&d=1511528733

Kazun
24-11-2017, 16:59
$var.property[0]

mcintosh55
24-11-2017, 17:40
$var.property[0] »
подскажите эту часть когда надо добавить в начале кода?

mcintosh55
27-11-2017, 13:23
$var.property[0] »
а можете как то это строку пояснить. Я правильно понял все переменный загнать в массив.

Kazun
27-11-2017, 14:48
Одно из свойств возвращает коллекцию объектов из Active Directory, т.к. в теме нет кода и проблемной строки, то логично, что вставить надо $ReplaceText.

mcintosh55
29-11-2017, 14:40
нет код »
#скрипт создает или обновляет подпись в 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

Kazun
29-11-2017, 14:58
$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
Эту часть кода где нужно поставить? Где получаем данные из AD

mcintosh55
30-11-2017, 16:02
Та же фигня, ладно Я пока забил на этот скрипт отправил бойца пускай физрой позанимался всего на 15 ПК настроить надо остальные подцепили




© OSzone.net 2001-2012