【发布时间】:2019-03-31 14:18:07
【问题描述】:
我正在尝试使用远程计算机的本地用户和组修改远程计算机的文件权限。
$IDR = New-Object System.Security.Principal.NTAccount( 'RemoteServer\testaccount' )
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$IDR,
'FullControl',
'ContainerInherit, ObjectInherit',
'None',
'Allow'
)
$Item = (Get-Item \\RemoteServer\share\folder\folder\file)
$ACL = $Item.GetAccessControl()
$ACL.AddAccessRule($AccessRule)
$Item.SetAccessControl($ACL)
输出:使用“1”个参数调用“AddAccessRule”的异常:“无法翻译部分或全部身份引用。”
我了解这意味着它找不到我正在搜索的“计算机\测试帐户”。我可以使用 Builtin*(例如:Builtin\Administrators)用户和组修改远程文件权限,但不能使用已创建的帐户。
远程服务器上确实存在testaccount。
\\RemoteServer\testaccount 不起作用
内置\testaccount 不起作用
本地\testaccount 不起作用
testaccount 不起作用
我可以通过大致相同的方式远程从本地文件权限中删除本地帐户。
是否可以从我的本地工作站将 RemoteServer 的非内置本地用户和组添加到 RemoteServer 的本地文件权限中?
或
如何解决上述错误?
解决方法编辑:
我不想这样做,但我能够使用 Win32_Process 启动 PowerShell 会话,其中包含应用权限的所有数据。有用。但是,这并不理想,因为它不适用于不能接受 WMI 的系统。我仍然想知道是否可以在没有这种笨拙的解决方法的情况下解决我原来的问题。
【问题讨论】:
-
你试过这里的Set-Acl方法吗? stackoverflow.com/questions/14402317/…
-
在脚本中不会走那么远。由于我提到的错误,它卡在了 $ACL.AddAccessRule($AccessRule) 上。
-
为此...(这并不理想,因为它不适用于无法接受 WMI 的系统。)---这就是为什么您要平衡 CIM/WSMAN 与 WMI . WMI 安全需求是挑剔的,并且依赖于 DCOM,它在远程会话方面有自己的问题。对无法处理 CIM/WSMAN 的主机使用 WMI。
-
我应该在不久前切换到 CIM,所以我在这个脚本中更改了它。我可能假设您的意思是早期版本的 Windows 不能接受 WMI,当我说“不能接受 WMI”时,我的意思是我们的服务器,比如没有 PowerShell 的 NetApp 服务器,因为我正在启动一个 PowerShell 实例WMI。
标签: .net powershell permissions file-permissions remote-access