非常感谢您提前帮助。
所以我有数百个文件和文件夹,我想从中删除用户:C850-108。 我可以使用Windows界面执行此操作,但在每个文件中都需要花费数天的时间。
我之所以这样做是因为Cobian Backup工具无法访问这些文件(Permission denied),我认为用户就是问题。
所以我有Cygwin(bash)PowerShell来帮助我完成这项繁琐的工作。
我附上3个截图:
Windows安全性标签
命令get-acl | format-list
getfacl
我对bash更有经验,所以我尝试添加这样的用户:
setfacl.exe -m u:rafaelgp:rwx myfile
显然什么也没做,但是当我查看PowerShell时,我看到它确实有效,并添加了具有指定权限的新用户(rafaelgp)。您可以在屏幕截图中看到这一点。所以在此之后我对Cygwin失去了一些信任。
我也试过删除这样的用户:
setfacl.exe -d u:C850-108 myfile
但我收到以下消息:
setfacl: illegal acl entries
那我该怎么办?正如我所说,我很高兴尝试使用bash或PowerShell。
干杯!
更新:
Musaab Al-Okaidi解决方案的屏幕截图。 “$ file”参数似乎存在问题
答案 0 :(得分:0)
将以下函数添加到shell中,只需复制并粘贴,然后您将Remove-UserAccess
作为可用的Cmdlet
Function Remove-UserAccess()
{
Param
(
[Parameter(Mandatory=$true)][String]$Path,
[Parameter(Mandatory=$true)][String]$User
)
$Files = New-Object System.Collections.ArrayList
$Files.Add($Path) | Out-Null
#Add all files and folders to an array
$PathSubtree = Get-ChildItem -Path $Path -Recurse
Foreach ( $File in $PathSubtree )
{
$Files.Add($File.FullName) | Out-Null
}
# Remove access of the $User from each file in the array
Foreach ( $File in $Files )
{
$AccessRule = Get-Acl $File | % { $_.Access } | ? { $_.IdentityReference -eq $User}
IF ( $AccessRule -eq $null )
{
Write-Host "$User does not have access to $File" -ForegroundColor Yellow
}
ELSE
{
$ACL = Get-Acl $File
$ACL.RemoveAccessRule($AccessRule) | out-Null
Set-Acl -Path $File -AclObject $ACL -ErrorAction Stop
Write-Host "Permissions for $user have been removed from the following path: $File" -ForegroundColor Green
}
}
}
执行以下命令:
Remove-UserAccess -Path C:\temp -User RAFALAPTOP\C850-108
这将从C:\ temp和所有子文件和文件夹中删除用户的访问权限。
答案 1 :(得分:0)
最简单的方法可能是icacls
:
icacls file /remove C850-180
但是,您无法删除从父文件夹继承的权限。我怀疑这就是setfacl
失败的原因。不幸的是,当您将Get-Acl
的输出传输到Format-List
时,会抑制继承信息。试试这个:
Get-Acl file | % { $_.Access } | ? { $_.IdentityReference -match 'C850-180' }
IsInherited
属性将显示ACL是否被继承。如果继承了ACL,则必须先删除继承,然后才能删除ACL:
icacls file /inheritance:d
自Windows Server 2003 SP2起, icacls
为available。
<强>更新强>
您可以通过添加选项/t
:
icacls C:\some\folder\* /t /inheritance:d
icacls C:\some\folder\* /t /remove C850-180
但是,请注意,以递归方式禁用继承是不的好主意,因为它会使管理权限成为一场噩梦。根据您的文件夹结构,最好从父文件夹中删除继承和特定的ACE:
icacls C:\some\folder /inheritance:d
icacls C:\some\folder /remove C850-180
子文件夹和文件将自动继承其父文件夹的已更改权限。如有必要,您可以通过重置子文件夹和文件的权限来强制执行该操作:
icacls C:\some\folder\* /reset /t /c