Замена текста в Microsoft Publisher с помощью Powershell

Моя команда по персоналу спросила, могу ли я помочь им создать новые визитные карточки для всех наших сотрудников. У них есть файл Publisher, и я пытаюсь заменить текст. Я написал все части, которые извлекают информацию из AD и механизм зацикливания, но я не могу заставить работать замену текста. Я сделал что-то подобное в Microsoft Word, прежде чем использовать метод Find.Execute из Word. Это было просто, так как я просто дал методу свои аргументы, и это сработало.

На этот раз я пытаюсь использовать объект FindReplace от Publisher. Я думаю, что неправильно использую это, но я не уверен, как. Мой код ниже, и любой вклад будет оценен. Извините, если это глупый вопрос, но я все еще относительно новичок в PowerShell и.NET.

$Document = "C:\Test\testcard.pub"

$Publisher = New-Object -comobject Publisher.Application  

$OpenDoc = $Publisher.Open($Document)

$OpenDoc.Find.Clear()
$OpenDoc.Find.FindText = "Jane"
$OpenDoc.Find.ReplaceWithText = "John"
$OpenDoc.Find.ReplaceScope = $pbReplaceScopeAll
$OpenDoc.Find.Execute() 

$OpenDoc.Save()
$OpenDoc.Close()
$Publisher.quit()

1 ответ

Решение

Я думаю $pbReplaceScopeAll не определено Хотя это выглядит так, как должно быть в документации. Документация использует Visual Basic, язык, который неявно создает переменные из перечислений.

PowerShell не предлагает эту функцию, поэтому вам придется напрямую ссылаться на необходимое вам значение перечисления. Это может сработать:

$OpenDoc.Find.ReplaceScope = [Publisher.PbReplaceScope]::pbReplaceScopeAll

Если это не сработает, похоже, pbReplaceScopeAll значение 2, так что вы можете определить $pbReplaceScopeAll самостоятельно:

$pbReplaceScopeAll = 2
## snip
$OpenDoc.Find.ReplaceScope = $pbReplaceScopeAll
Другие вопросы по тегам