«Запуск от имени разных пользователей» в PowerShell ведет себя по-разному - PullRequest
0 голосов
/ 07 ноября 2018

Я использую «Запуск от имени другого пользователя» при запуске сценария PowerShell, и он ведет себя иначе, чем когда я запускаю сценарий в обычном терминале PowerShell. Например, если я попытаюсь запустить следующий код в терминале «Запуск от имени», произойдет ошибка. Но если я запускаю его с обычным терминалом, он работает просто отлично.

function Replace-Word(
    [string]$Document,
    [string]$FindText,
    [string]$ReplaceText
  )
{
    $ReplaceAll = 2
    $FindContinue = 1

    $MatchCase = $False
    $MatchWholeWord = $True 
    $MatchWildcards = $False 
    $MatchSoundsLike = $False 
    $MatchAllWordForms = $False
    $Forward = $True
    $Wrap = $FindContinue
    $Format = $False

    $Word = New-Object -comobject Word.Application
    $Word.Visible = $False

    $OpenDoc = $Word.Documents.Open($Document)
    $Selection = $Word.Selection

    $Selection.Find.Execute(
    $FindText,
    $MatchCase,
    $MatchWholeWord,
    $MatchWildcards,
    $MatchSoundsLike,
    $MatchAllWordForms,
    $Forward,
    $Wrap,
    $Format,
    $ReplaceText,
    $ReplaceAll
    ) | Out-Null

    $OpenDoc.Close()
    $Word.quit()
}


Copy-Item "C:\Welcome.DOC" "C:\test.DOC"

Replace-Word -Document "C:\test.DOC" -FindText '<UserName>' -ReplaceText "JohnDoe"
Replace-Word -Document "C:\test.DOC" -FindText '<EmailAddress>' -ReplaceText "JohnDoe@example.com"

Ошибки, которые я получаю при работе от имени другого пользователя:

You cannot call a method on a null-valued expression.
At C:\Users\lbradstr\Desktop\TechRepo\NewEEsetup\NewUserSetup.ps1:2668 char:9
+         $Selection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

You cannot call a method on a null-valued expression.
At C:\Users\lbradstr\Desktop\TechRepo\NewEEsetup\NewUserSetup.ps1:2670 char:9
+         $OpenDoc.Close()
+         ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

You cannot call a method on a null-valued expression.
At C:\Users\lbradstr\Desktop\TechRepo\NewEEsetup\NewUserSetup.ps1:2668 char:9
+         $Selection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

You cannot call a method on a null-valued expression.
At C:\Users\lbradstr\Desktop\TechRepo\NewEEsetup\NewUserSetup.ps1:2670 char:9
+         $OpenDoc.Close()
+         ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

На обоих терминалах установлена ​​одна и та же версия PowerShell:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      14409  1012  

Я бы запустил этот код в обычном терминале, если бы мог, но это только часть более крупного скрипта, который я запускаю. Для запуска остальной части скрипта требуются административные привилегии, поэтому я использую функцию «Запуск от имени». Любые идеи о том, почему код будет выполняться по-разному между двумя учетными записями пользователей? Любые предложения будут очень признательны!

1 Ответ

0 голосов
/ 08 ноября 2018

Все остальные предложения остаются в силе (после того, как разрешения и ACL для файла были отсортированы), и все равно выдает эту ошибку ... ТО:

Это классический случай заблокированного файла в Word. Вам необходимо освободить COM-объект из вашего последнего сеанса PowerShell, поскольку он, вероятно, все еще обращается к файлу и вызывает проблемы.

После того, как вы отпустите COM-объект или закроете все текстовые процессы, попробуйте запустить снова, и он должен работать.

...