【问题标题】:Remote Administration of Local Permissions and Local Users/Groups本地权限和本地用户/组的远程管理
【发布时间】: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


【解决方案1】:

您的代码似乎有一些问题。

首先,你有一个错字

\\Computer\C$\user\username\desktop\testfile

但那应该是

\\Computer\C$\users\username\desktop\testfile

('users' = 复数).

接下来,您将使用 Computer\testaccount 获取 Security.Principal.NTAccount,但稍后您将使用 username 获取文件项。

这应该可以工作:

# create the Full Control access rule for the user
$AccessRule = (New-Object System.Security.AccessControl.FileSystemAccessRule(
                [System.Security.Principal.NTAccount]"$computerName\$userSamAccountName",
                "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow"))

# get the item you want to set the FullControl accessrule on.
# you need permissions for this of course..
$Item = (Get-Item "\\$computerName\C$\user\$userSamAccountName\desktop\testfile")
$ACL = (Get-Acl -Path $Item.FullName)
$ACL.AddAccessRule($AccessRule)
Set-Acl -Path $Item.FullName $ACL

【讨论】:

  • 文件路径是在实际代码中动态检索的,所以它是正确的。但是在文件路径的示例代码中,我忘记了“s”,我的错。如上所述,我遇到了这个错误的问题:使用“1”参数调用“AddAccessRule”的异常:“无法翻译部分或全部身份引用。”。我想找到一种方法,让我的本地机器在将 AccessRule 添加到 ACL -> $ACL.AddAccessRule($AccessRule) 时解析 IDR。
  • @KyleHewitt 该错误也可能意味着该文件当前已删除 ACL 中的用户,因此它可能与您尝试设置的新访问规则无关。你检查了吗?一步一步来。 [System.Security.Principal.NTAccount]"$computerName\$userSamAccountName" 显示什么?和$AccessRule 创建后?可以在电脑上手动设置访问规则吗?
猜你喜欢
  • 2015-04-02
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多