我有一个特定的文件夹(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/