需要一些帮助。该脚本根本不会更改权限。
我想让文件夹的名称成为具有完全权限的文件夹的所有者。
$foldernames = (Get-ChildItem \\knesmbmdc001\profiles).Name
$user = "$foldernames"
$usercount = 0
foreach($name in $foldernames)
{
If ($usercount -le 5)
{
Try
{
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,"FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl = get-acl $name
$acl.AddAccessRule($rule)
Set-acl $name $acl
}
catch
{
Add-Content C:\user_done.txt $name
}
}
}
答案 0 :(得分:3)
您的脚本存在直接问题:
传递给New-Object System.Security.AccessControl.FileSystemAccessRule
的第一个参数应该是$name
,而不是$user
。
您的Add-Content
调用日志文件的调用不应该在catch
子句中,因为它只会记录ACL操作不是成功。
如果您的catch
子句中没有其他声明,则有效忽略。
您只是将文件夹名称传递给期望路径(Get-Acl
,Set-Acl
)的cmdlet,这只适用于当前位置恰好是文件夹的父位置。
以下是您的脚本的重新制定,应该按预期工作:
$dir = '\\knesmbmdc001\profiles'
$logFile = 'C:\user_done.txt'
Get-ChildItem -Directory $dir | % {
$user = $_.Name
$acl = Get-Acl -LiteralPath $_
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $user, FullControl, "ContainerInherit, ObjectInherit", None, Allow
$acl.AddAccessRule($rule)
Set-Acl -LiteralPath $_ -AclObject $acl
Add-Content $logFile $user
}
但请注意,虽然此会向目标用户提供完全控制 ,但不会使他们成为所有者 的文件夹。
要实际更改所有权,请尝试以下操作(替换$rule=...
和$acl.AddAccessRule...
命令):
$userIdentity = New-Object System.Security.Principal.NTAccount $user
$acl.SetOwner($userIdentity)
在使用提升的权限运行时,这对我使用本地用户帐户,但YMMV。