powershell - 设置系统有权通过Powershell写入文件夹

标签 powershell acl

我有一个特定的文件夹(C:\ Windows \ winsxs \ amd64_microsoft-windows-wpd-portabledeviceapi_31bf3856ad364e35_6.1.7601.17514_none_a926cbb502a97a6e)我需要能够通过Powershell脚本更改权限。

我需要使System能够在此文件夹中创建文件。

当我检查Get-Acl命令时,它表明NT Authority \ System已经是文件夹的所有者了吗?通过Set-ACL运行以使该系统帐户能够创建文件的最佳命令是什么?

提前致谢。

(到目前为止,我已经尝试过此代码...但是我拒绝了访问)

$folder = "C:\Windows\winsxs\amd64_microsoft-windows-wpd-portabledeviceapi_31bf3856ad364e35_6.1.7601.17514_none_a926cbb502a97a6e"
$myUser = "NT AUTHORITY\SYSTEM"
$acl = Get-Acl $folder
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$myUser", "ReadData", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$myUser", "CreateFiles", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$myUser", "AppendData", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)
Set-Acl $folder $acl

Set-Acl : Attempted to perform an unauthorized operation.
At line:10 char:1
+ Set-Acl $folder $acl
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : PermissionDenied: (C:\Windows\wins...926cbb502a97a6e:String) [Set-Acl], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetAclCommand

最佳答案

C:\Windows\winsxs是Windows组件存储。 非常,在篡改其中的任何内容时要格外小心。

之所以会出现“访问被拒绝”的原因很可能是因为组件存储库由NT Authority\TrustedInstaller安全主体拥有。管理员,甚至SYSTEM那里都只有读/执行访问权限。如果要能够修改其中一个子文件夹的权限,则需要首先获得winsxs文件夹的所有权并授予管理员完全访问权限。

完成所做的任何更改后,请特别小心,以将所有权恢复为NT Authority\TrustedInstaller(并还原获得所有权时可能已删除的权限)。

这样的事情应该可以工作(不过,未经测试,因此请谨慎处理):

$fldr = 'C:\Windows\winsxs'

# get backup copy of folder ACL
$aclBackup = Get-Acl $fldr

try {
  # take ownership 
  $acl = Get-Acl $fldr
  $admins = New-Object Security.Principal.NTAccount('Builtin', 'Administrators')
  $acl.SetOwner($admins)
  Set-Acl -AclObject $acl -Path $fldr

  # not certain if taking ownership and adding permissions in one step works,
  # thus using two steps
  $acl = Get-Acl $fldr
  $ace = New-Object Security.AccessControl.FileSystemAccessRule('Builtin\Administrators', 'FullControl', 'ContainerInherit, ObjectInherit', 'InheritOnly', 'Allow')
  $acl.AddAccessRule($ace)
  Set-Acl -AclObject $acl -Path $fldr

  # change permissions of subfolder
  $sf = "$fldr\amd64_microsoft-windows-..."
  $acl = Get-Acl $sf
  $ace = New-Object Security.AccessControl.FileSystemAccessRule('NT Authority\SYSTEM', 'FullControl', 'ContainerInherit, ObjectInherit', 'InheritOnly', 'Allow')
  $acl.AddAccessRule($ace)
  Set-Acl -AclObject $acl -Path $sf

  # ...
  # more stuff
  # ...
} finally {
  # always restore original ACL on winsxs folder (error or not)
  Set-Acl -AclObject $aclBackup -Path $fldr
}

关于powershell - 设置系统有权通过Powershell写入文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26588228/

相关文章:

windows - 如何在 Windows 8.1 Update 2 操作系统中使用 PowerShell 环境中的 Win32 API FindWindow() 查找桌面窗口(按窗口名称)?

regex - 跳过高性能 Powershell 正则表达式脚本 block 中的标题行

xml - PowerShell XML 输出

zend-framework - Zend Framework ACL 角色和模块

navigation - ZF2 为导航注册自定义助手

PowerShell 设置 Acl 新对象 : Cannot find an overload for "FileSystemAccessRule" and the argument count: "4"

powershell - 运行在虚拟机上执行 PowerShell 命令的 Azure Runbook 时出错

java - 如何使用 Java 在 Windows 中比较 Fedora iso 下载文件与其 sha-256 校验和文本文件?

authentication - 使用 Codeigniter/Ion Auth 实现 ACL

delphi - 在 Lazarus/Delphi 中修改文件 ACL