![在 Powershell 中,如何使用非管理员帐户检查远程服务器上的驱动器空间?](https://linux22.com/image/727315/%E5%9C%A8%20Powershell%20%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E9%9D%9E%E7%AE%A1%E7%90%86%E5%91%98%E5%B8%90%E6%88%B7%E6%A3%80%E6%9F%A5%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E9%A9%B1%E5%8A%A8%E5%99%A8%E7%A9%BA%E9%97%B4%EF%BC%9F.png)
我在一个包含多台服务器的活动目录环境中工作。我有一个用户帐户,我想用它来检查其他服务器的状态,但不授予该帐户对这些其他服务器的完全管理权限。具体来说,我想检查这些服务器上的驱动器空间,我想用 Powershell 来做这件事。
我已经在目标服务器上执行了 Enable-PSRemoting,并且我可以成功使用管理员凭据远程调用 Get-PSDrive。结果几乎立即返回,并包含有关所有驱动器上已使用/可用空间的信息。
Invoke-Command -computer remoteserver1 {Get-PSDrive -PSProvider FileSystem}
但是,当我以非管理用户身份运行相同的命令( )时,结果返回得非常慢(大约需要 30 秒),并且没有任何驱动器有关其已用/可用空间的信息。
我目前所做的:
- 我已将非管理用户帐户添加到目标服务器上的远程管理用户组。
- 编辑了 scmanager 的 SDDL(在目标服务器上),以便为远程管理用户添加与内置管理员相同的 DiscretionaryACL。
- 每这个帖子,我已在 wmimgmt.exe > WIM 控制(本地)>(右键单击)> 属性 > 安全选项卡 > 展开“根”> 单击安全节点 > 单击“安全”按钮 > 添加具有完全访问权限的非管理员用户中授予此用户 WMI 权限。
- 将用户添加到目标服务器上的分布式 COM 用户组。
一些人还建议尝试Invoke-Command -computer remoteserver1 {Get-WmiObject -Class Win32_MappedLogicalDisk}
排除故障,但结果却是“访问被拒绝”。我相信,如果我能Get-WmiObject
成功地为这个受限用户工作,它就能解决我的问题。
我应该怎么做才能让这个有限的用户帐户获得检查其他服务器上的驱动器空间所需的访问权限?无需授予帐户管理员权限,最好也无需映射和取消映射任何驱动器?
答案1
非常感谢您的回答,但我希望我的实现更加一致,最终我偶然发现了下面较旧的 PowerShell DSC 资源,但我还添加了组成员身份所需的内容。在 WinSrv2019 上,我注意到 PS 远程处理/Dcom 访问默认设置正确,因此只需要这样做。
- 安装 DSC 资源
Install-Module -Name WmiNamespaceSecurity
Install-Module -Name ComputerManagementDsc
- 在 DSC 的代码中导入参考。
Import-DscResource -ModuleName WmiNamespaceSecurity
Import-DscResource -ModuleName ComputerManagementDsc -ModuleVersion 9.0.0
- 使用 Baodad 推荐的配置进行配置。
WmiNamespaceSecurity AddDcom
{
Path = 'root'
Principal = "Builtin\Distributed COM Users"
AppliesTo = 'Self'
AccessType = 'Allow'
Permission = 'Enable', 'MethodExecute', 'RemoteAccess'
Ensure = 'Present'
}
Group "Distributed COM Users"
{
GroupName = "Distributed COM Users"
Ensure = "Present"
MembersToInclude = "Group_Or_User"
}
Group "Remote Management Users"
{
GroupName = "Remote Management Users"
Ensure = "Present"
MembersToInclude = "Group_Or_User"
}
答案2
要允许非管理帐户执行必要的 Powershell 命令以返回有关远程服务器上的驱动器空间的信息,请在目标服务器上完成以下步骤(作为服务器/域管理员)。
Enable-PSRemoting
- 如果您需要进一步解释,请谷歌搜索。单击开始 > 运行...,输入
lusrmgr.msc
并单击确定单击“组”文件夹。
双击远程管理用户组,添加非管理员用户账户,点击确定。
双击“Distributed COM Users”组,添加非管理员用户账户,点击“OK”。
配置 DCOM 安全设置
单击开始 > 运行...,输入
dcomcnfg
并单击确定深入“组件服务”树,直到找到“我的电脑”。右键单击“我的电脑”以调出菜单,然后单击“属性”。
单击“COM 安全”选项卡。
单击“访问权限”部分中的“编辑限制”。确保“分布式 COM 用户”组已选中本地访问和远程访问复选框。单击“确定”。
单击“启动和激活权限”部分中的“编辑限制”。确保“分布式 COM 用户”组的所有四个“允许”框都已选中。单击“确定”。
配置 WMI 控制安全设置。
单击开始 > 运行...,输入
wmimgmt.msc
并单击确定。右键单击“WMI 控制(本地)”以调出菜单,然后单击“属性”。
单击“安全”选项卡,然后单击“Root”,再单击对话框底部的“安全”按钮。
单击添加...并添加本地分布式 COM 用户组。
单击“高级”。
突出显示包含分布式 COM 用户的行,然后单击“编辑”按钮。
从“应用于”下拉列表中,选择“此命名空间和子命名空间”
在允许列下,选中“执行方法”、“启用帐户”和“远程启用”
单击“确定”退出对话框窗口。
(26.)重新启动 WinRM(Windows 远程管理)服务
如果您对安全问题或如何改善最低特权访问有任何反馈,请在下面评论。