Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Не удалось преобразовать значение

Ответить
Настройки темы
PowerShell - [решено] Не удалось преобразовать значение

Старожил


Сообщения: 300
Благодарности: 8

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg Снимок.JPG
(100.4 Kb, 8 просмотров)
Для создания уникальной подписи в 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

Отправлено: 16:07, 24-11-2017

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$var.property[0]

Отправлено: 16:59, 24-11-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 300
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Kazun:
$var.property[0] »
подскажите эту часть когда надо добавить в начале кода?

Отправлено: 17:40, 24-11-2017 | #3


Старожил


Сообщения: 300
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Kazun:
$var.property[0] »
а можете как то это строку пояснить. Я правильно понял все переменный загнать в массив.

Отправлено: 13:23, 27-11-2017 | #4


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:48, 27-11-2017 | #5


Старожил


Сообщения: 300
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата 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

Отправлено: 14:40, 29-11-2017 | #6


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$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]
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:58, 29-11-2017 | #7


Старожил


Сообщения: 300
Благодарности: 8

Профиль | Отправить PM | Цитировать


Эту часть кода где нужно поставить? Где получаем данные из AD

Отправлено: 04:51, 30-11-2017 | #8


Старожил


Сообщения: 300
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:02, 30-11-2017 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Не удалось преобразовать значение

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как получить значение параметра из реестра, добавить значение в текстовый файл etc.? Dark Ange1 Скриптовые языки администрирования Windows 28 22-06-2022 14:37
CMD/BAT - [решено] Не прописываемое значение... Dodakaedr Скриптовые языки администрирования Windows 17 04-11-2016 15:57
2012 R2 - Клиенту WinRM не удалось обработать запрос, так как не удалось разрешить имя сервера Ua-life Windows Server 2012/2012 R2 0 23-10-2015 11:38
Загрузка - XP SP3. Значение «громкость» сбрасывается в среднее значение при перезагрузке. mitkadritka Microsoft Windows 2000/XP 9 24-02-2012 20:37
Windows не удалось завершить проверку и Не удалось запустить дефрагментатор диска Wgang Лечение систем от вредоносных программ 5 17-08-2009 21:54




 
Переход