我已经在之前的脚本中使用了一些工作代码,这些代码使用POSH改变了文件夹的安全权限,但是,我现在想让DENY,SYSTEM访问此文件夹,而不是允许修改帐户的权限。 ({这是关闭可怕的Windows10UpgraderApp.exe}在MDT任务序列期间运行)。
这是我认为可行的代码:
New-Item -ItemType directory -Path C:\Windows10upgrade -force
$privuser = "system"
$Acl1 = Get-Acl "C:\Windows10Upgrade"
$Ar1 = New-Object system.security.accesscontrol.filesystemaccessrule("$privuser","deny")
$Acl1.SetAccessRule($Ar1)
这是我得到的错误:
New-Object : Cannot find an overload for "FileSystemAccessRule" and the argument count: "2".
At line:3 char:8
+ $Ar1 = New-Object system.security.accesscontrol.filesystemaccessrule("$privuser" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
在这个上丢失了一点 - 这段代码在之前使用过的脚本中有效。
提前致谢
编辑:收到以下建议后(谢谢)我现在运行此代码:
New-Item -type directory -path C:\Windows10Upgrade -force
$Acl = Get-Acl "C:\Windows10Upgrade"
$Ar = New-Object system.security.accesscontrol.filesystemaccessrule("System","FullControl","Deny")
$Acl.SetAccessRule($Ar)
Set-Acl "C:\Windows10Upgrade" $Acl
我知道它可能具有欺骗性,因为当您以这种方式进行更改时会勾选“特殊权限”框,但是,这不会引发错误,但系统的权限看起来相同,就像遗憾的是没有成功应用更改访问规则。
第二次编辑:似乎发生了一些事情,但现在SYSTEM有多个权限条目,所需的ACL规则位于SYSTEM的顶部,但仍然在下面分配完全控制:
PS C:\WINDOWS\system32> get-acl -Path C:\Windows10upgrade | select *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows10upgrade
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\
PSChildName : Windows10upgrade
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
CentralAccessPolicyId :
CentralAccessPolicyName :
AccessToString : NT AUTHORITY\SYSTEM Deny FullControl
BUILTIN\Administrators Allow FullControl
BUILTIN\Administrators Allow 268435456
NT AUTHORITY\SYSTEM Allow FullControl
NT AUTHORITY\SYSTEM Allow 268435456
BUILTIN\Users Allow ReadAndExecute, Synchronize
NT AUTHORITY\Authenticated Users Allow Modify, Synchronize
NT AUTHORITY\Authenticated Users Allow -536805376
AuditToString :
Path : Microsoft.PowerShell.Core\FileSystem::C:\Windows10upgrade
Owner : BUILTIN\Administrators
Group : COMPANY\Roles - Technical Services
Access : {System.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule,
System.Security.AccessControl.FileSystemAccessRule, System.Security.AccessControl.FileSystemAccessRule...}
Sddl : O:BAG:S-1-5-21-2593231249-3506496172-1181922232-40387D:AI(D;;FA;;;SY)(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;FA;;;SY)(A;OI
CIIOID;GA;;;SY)(A;OICIID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)
AccessRightType : System.Security.AccessControl.FileSystemRights
AccessRuleType : System.Security.AccessControl.FileSystemAccessRule
AuditRuleType : System.Security.AccessControl.FileSystemAuditRule
AreAccessRulesProtected : False
AreAuditRulesProtected : False
AreAccessRulesCanonical : True
AreAuditRulesCanonical : True
答案 0 :(得分:2)
解决方案在错误消息中。引用the documentation,至少需要3个参数。那是this constructor:
public FileSystemAccessRule(
string identity,
FileSystemRights fileSystemRights,
AccessControlType type
)
您似乎错过了中间参数FileSystemRights
,因为您已将用户指定为" system"并且AccessControlType
要拒绝......但不能拒绝哪些权限。
修改强>
右键单击该文件夹,然后转到Properties
> Security
> Advanced
。您应该看到类似于下面的屏幕。
蓝色突出显示的行是脚本添加的行。黄色突出显示的行是继承的,因此它未在文件夹上设置,而是在整个驱动器上设置。对我来说,这就是为什么有多个权限行。
Deny
胜过Allow
,这不是一个真正的问题。要确认,您可以为您的用户或管理员组设置Deny
权限,并尝试访问该文件夹。
如果权限未被继承,而是应用于该文件夹,则需要使用RemoveAccessRule
方法,其方式与SetAccessRule
的使用方式类似:
$remove = New-Object system.security.accesscontrol.filesystemaccessrule("System","FullControl","Allow")
$Acl.RemoveAccessRule($remove)