通过 PowerShell 更改 DCOM 对象权限后要重新启动啥?

Posted

技术标签:

【中文标题】通过 PowerShell 更改 DCOM 对象权限后要重新启动啥?【英文标题】:What to restart after changing DCOM object permissions via PowerShell?通过 PowerShell 更改 DCOM 对象权限后要重新启动什么? 【发布时间】:2020-01-15 13:09:34 【问题描述】:

我正在使用 PowerShell 成功设置 DCOM 对象的权限。

但是,之后我的软件使用 DCOM 对象时,直到我重新启动计算机才能识别权限更改。

如何防止重新启动?更改权限后是否可以重新启动单个组件/服务?

我正在使用此代码更改权限:

$apiDCOMObj = Get-WmiObject -Query ('SELECT * FROM Win32_DCOMApplicationSetting WHERE Caption = "MyAPI"') -EnableAllPrivileges
$descrLaunch = $apiDCOMObj.GetLaunchSecurityDescriptor().descriptor
$descrAccess = $apiDCOMObj.GetAccessSecurityDescriptor().descriptor
$trusteeObj = ([wmiclass]'Win32_Trustee').psbase.CreateInstance()
$trusteeObj.Domain = "NT AUTHORITY"
$trusteeObj.Name = "NETWORK SERVICE"
$aceLaunch = ([wmiclass]'Win32_ACE').psbase.CreateInstance()
$aceLaunch.AccessMask = 11                                            # Mask for Local Launch and Local Activation
$aceLaunch.trustee = $trusteeObj
$aceAccess = ([wmiclass]'Win32_ACE').psbase.CreateInstance()
$aceAccess.AccessMask = 3                                             # Mask for Local Access
$aceAccess.trustee = $trusteeObj
$descrLaunch.DACL += [System.Management.ManagementBaseObject]$aceLaunch
$descrAccess.DACL += [System.Management.ManagementBaseObject]$aceAccess
$apiDCOMObj.SetLaunchSecurityDescriptor($descrLaunch)
$apiDCOMObj.SetAccessSecurityDescriptor($descrAccess)

【问题讨论】:

您找到过自动化解决方案吗? 【参考方案1】:

您可以拨打Restart-Service。

Restart-Service -Name <your_service_name>

这将使用新权限重新启动服务。

【讨论】:

我不能。按钮是灰色的:-(【参考方案2】:

这看起来很奇怪,但像这样的查询

Get-WmiObject -Query "select * from Win32_Bios"

在刷新 DCOM 命名空间的安全性方面对我有用。

【讨论】:

以上是关于通过 PowerShell 更改 DCOM 对象权限后要重新启动啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vb6 中更改 DCOM 的 guid?

以编程方式编辑 DCOM 协议

如何使用 Powershell 配置新的 DCOM RunAs 用户 [重复]

通过 DCOM 传递 NT 句柄

无法使用 jinterop 打开 dcom 会话

powershell 通过更改和发出哔哔声,在PowerShell中引起用户的注意