修改文件夹权限
Modifying folder permissions
需要一点帮助。该脚本根本没有更改权限。
我想让文件夹的名字成为拥有完整权限的文件夹的所有者。
$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
}
}
}
脚本的直接问题:
传递给 New-Object System.Security.AccessControl.FileSystemAccessRule
的第一个参数应该是 $name
,而不是 $user
。
你的 Add-Content
写入日志文件的调用不应该在 catch
子句中,因为它只会在 ACL 操作执行 不成功。
通过在 catch
子句中没有其他语句,异常实际上被 忽略。
您只是将文件夹 names 传递给期望 paths (Get-Acl
, Set-Acl
),仅当当前位置恰好是文件夹的父位置时才有效。
这里是您的脚本的重新表述,应该可以按预期工作:
$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。
需要一点帮助。该脚本根本没有更改权限。
我想让文件夹的名字成为拥有完整权限的文件夹的所有者。
$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
}
}
}
脚本的直接问题:
传递给
New-Object System.Security.AccessControl.FileSystemAccessRule
的第一个参数应该是$name
,而不是$user
。你的
Add-Content
写入日志文件的调用不应该在catch
子句中,因为它只会在 ACL 操作执行 不成功。通过在
catch
子句中没有其他语句,异常实际上被 忽略。您只是将文件夹 names 传递给期望 paths (
Get-Acl
,Set-Acl
),仅当当前位置恰好是文件夹的父位置时才有效。
这里是您的脚本的重新表述,应该可以按预期工作:
$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。