Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Не удалось преобразовать значение (http://forum.oszone.net/showthread.php?t=331429)

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

Kazun 24-11-2017 16:59 2779919

Код:

$var.property[0]

mcintosh55 24-11-2017 17:40 2779927

Цитата:

Цитата Kazun
$var.property[0] »

подскажите эту часть когда надо добавить в начале кода?

mcintosh55 27-11-2017 13:23 2780469

Цитата:

Цитата Kazun
$var.property[0] »

а можете как то это строку пояснить. Я правильно понял все переменный загнать в массив.

Kazun 27-11-2017 14:48 2780491

Одно из свойств возвращает коллекцию объектов из Active Directory, т.к. в теме нет кода и проблемной строки, то логично, что вставить надо $ReplaceText.

mcintosh55 29-11-2017 14:40 2780986

Цитата:

Цитата Kazun
нет код »

Код:

#скрипт создает или обновляет подпись в 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 2780992

Код:

$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.

Время: 08:26.
© OSzone.net 2001-