powershell - “以不同的用户身份运行”与 PowerShell 的行为不同
问题描述
我在运行 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
如果可以的话,我会在普通终端中运行这段代码,但这只是我正在运行的更大脚本的一部分。脚本的其余部分需要管理权限才能运行,这就是我使用“运行方式”功能的原因。关于为什么代码在两个用户帐户之间执行不同的任何想法?任何建议将不胜感激!
解决方案
其他人的建议仍然适用(一旦对文件的权限和 ACL 进行了排序)并且它仍然给你这个错误......然后:
这是Word中锁定文件的经典案例。您需要从上一个 PowerShell 会话中释放 COM 对象,因为它可能仍在访问文件并导致问题。
释放 COM 对象或关闭所有文字进程后,再次尝试运行 as,它应该可以工作。
推荐阅读
- r - Rmarkdown 中的 ifelse 语句和内联注释
- python - PyQt5 - 撤消实现
- scala - 弹性4s。Scala 模块需要 Jackson Databind 版本
- javascript - 在其边缘附近单击时,如何避免光标跳转到输入的开头?
- vue.js - 补丁 axios vue js 无法获取id
- python - 在 Python 中随机生成二维列表
- github - 如何解决启动 Github Desktop (win10) 报错:无法锁定配置文件,权限被拒绝
- java - 如何在接口实现中使用泛型构造函数?
- excel - 如何仅计算excel列中的条目一定次数?
- excel - 如何将包含公式和值的列复制到 Excel ListObject 表?