【发布时间】:2017-12-18 11:30:23
【问题描述】:
在以不同用户身份运行的 powershell 5.1 (x86) 中使用 Interop.DSOFile.dll 函数和类时收到此错误。我使用的帐户是一个 AD 功能帐户,它对包含 dll 的文件夹具有完全权限。我需要使用这个帐户,因为它比我自己的 AD 帐户拥有更多的访问权限来完成所需的工作。
我可以在我自己的用户帐户上毫无问题地运行以下代码,但是当我尝试使用功能帐户时,标题中出现错误。
[System.Reflection.Assembly]::LoadFrom('C:\Path\To\Interop.DSOFile.dll')
New-Object DSOFile.OleDocumentPropertiesClass
这会导致错误:
New-Object : Exception calling ".ctor" with "0" argument(s): "Retrieving the
COM class factory for component with CLSID
{58968145-CF05-4341-995F-2EE093F6ABA3} failed due to the following error:
80070005 Access is denied. (Exception from HRESULT: 0x80070005
(E_ACCESSDENIED))."
At line:1 char:1
+ New-Object DSOFile.OleDocumentPropertiesClass
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodInvoca
tionException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.Power
Shell.Commands.NewObjectCommand
我检查了 CLSID 是否存在,并且我可以使用功能帐户看到它,并且它在那里:
gci 'HKLM:\SOFTWARE\Classes\CLSID' | ?{$_.PSChildName -match '58968145-CF05-4341-995F-2EE093F6ABA3'}
Property : {(default)}
PSPath :
Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE
\Classes\CLSID\{58968145-CF05-4341-995F-2EE093F6ABA3}
PSParentPath :
Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE
\Classes\CLSID
PSChildName : {58968145-CF05-4341-995F-2EE093F6ABA3}
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
PSIsContainer : True
SubKeyCount : 2
View : Default
Handle : Microsoft.Win32.SafeHandles.SafeRegistryHandle
ValueCount : 1
Name : HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{58968145-CF05-4341-9
95F-2EE093F6ABA3}
我尝试使用来自类似 Stackoverflow 问题的解决方案,这些问题引用使用 Dcomcnfg.exe\DCOM Config 来授予帐户访问权限。 Com+ 配置
- 进入控制面板 -> 管理员 -> 组件服务 -> DCOM 配置
- 打开 Microsoft Word 97 - 2003 属性
- 常规 -> 身份验证级别:无
- 安全 -> 自定义所有 3 个权限以允许所有人
我也将 AD 功能帐户添加到我的本地管理员组,但没有成功。
【问题讨论】:
-
该帐户是否有足够的权限来读取注册表项?我会从 Microsoft (sysinternals) 下载 procmon,运行它,运行你的代码,停止它并搜索访问冲突(或使用最适合你的过滤或计数出现)
-
感谢 Lieven,非常感谢您协助寻找答案。
标签: c# powershell dll dsofile