COM 对象、Powershell 5 与 7 和受约束的语言模式

COM Objects, Powershell 5 vs 7 and Constrained Language mode

提问人:Jimmy Mc 提问时间:11/13/2023 最后编辑:Simon MourierJimmy Mc 更新时间:11/13/2023 访问量:52

问:

我有一个奇怪的问题,想知道是否有人有任何想法。我正在尝试制作一个可以替换 word 文档中文本的 powershell 脚本。

此脚本在版本 5 上工作正常,但在版本 7 上工作不正常

如何使用Powershell替换Word中单行和不同行的文本?

问题出在命令上

新对象-ComObject word.application

在版本 5 中它可以工作,但在版本 7 中我得到

New-Object:无法创建类型。此语言模式仅支持内核类型。

在这两个 shell 中,我都得到语言模式是 Constrained。

PS C:\Windows\System32> $ExecutionContext.SessionState.LanguageMode

约束语言

有什么想法吗?

PowerShell COM PowerShell-7.0

评论

0赞 Mathias R. Jessen 11/13/2023
我无法重现此行为,我收到预期的“新对象:无法创建类型。此语言模式仅支持内核类型“错误。您如何设置语言模式?
0赞 Jimmy Mc 11/13/2023
谢谢。好问题,我需要联系我们的外包 IT 服务提供商,了解他们是如何做到的。我找不到环境变量__PSLockdownPolicy或注册表 keu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment__PSLockdownPolicy所以我假设它的 AppLocker
0赞 Mathias R. Jessen 11/13/2023
我强烈怀疑他们的配置没有按照他们预期的方式工作。如果您手动启动 Windows PowerShell 并执行操作,会发生什么情况?$ExecutionContext.SessionState.LanguageMode = 'ConstrainedLanguage'; New-Object -ComObject Word.Application
1赞 lit 11/14/2023
将代码放在 SO 的注释中很少会产生任何可读性。编辑问题并将其格式化为代码。
1赞 mclayton 11/14/2023
根据 devblogs.microsoft.com/powershell/...COM 在受约束的语言模式下被阻止...“COM 对象被阻止。它们可以公开 Win32 API,这些 API 可能从未作为攻击面的一部分进行过严格强化。learn.microsoft.com/en-us/powershell/module/ 的文档说类似(有几个特定的例外),这意味着它甚至不应该在 PS 5.1 中真正工作......

答: 暂无答案