Powershell在set-acl之前获取文件夹的所有权

时间:2016-09-28 20:42:39

标签: powershell

我可以接管所有权,然后将-acl设置为文件夹吗?我有一个folders.txt文件,其中我有文件夹的位置。

例如:

D:\Dept\CC\NorthRiver\16-17\StaffAdministration

然后,我创建了上一年文件夹结构的新年,并将前几年文件夹的权限和权限复制到新文件夹年份匹配文件夹。因为文件夹的所有权,我遇到了一个问题。如果我不是所有者,我无法复制某些文件夹的权限,我会收到Set-ACL : The security identifier is not allowed to be the owner of this object.有什么方法吗?

我尝试添加该行(将所有者更改为我,但这也不起作用):

get-item $currentFolder.Replace("16-17", "15-16") | set-owner -Account 'VDB-TST1\Administrators'

有没有人对我如何做到这一点有任何想法? 这是我的完整脚本:

Function Get-FileName{
[CmdletBinding()]
Param(
    [String]$Filter = "|*.*",
    [String]$InitialDirectory = "C:\")

    [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.initialDirectory = $InitialDirectory
    $OpenFileDialog.filter = $Filter
    [void]$OpenFileDialog.ShowDialog()
    $OpenFileDialog.filename
}


    #Get and Set the ACL to the new years folder structure
    foreach ($currentFolder in (GC (Get-FileName -InitialDirectory $env:USERPROFILE\Desktop -Filter "Text files (*.txt)|*.txt|All files (*.*)|*.*"))) {
    md $currentFolder # Create Folder
    get-item $currentFolder.Replace("16-17", "15-16") | set-owner -Account 'VDB-TST1\Administrators'
    Get-ACL $currentFolder.Replace("16-17", "15-16") | Set-ACL $currentFolder 
}

2 个答案:

答案 0 :(得分:1)

我认为您遇到了this post.中描述的Set-ACL和Get-ACL的相同限制尝试更改

Get-ACL $currentFolder.Replace("16-17", "15-16") | Set-ACL $currentFolder

(Get-Item $currentFolder.Replace("16-17", "15-16")).GetAccessControl('Access') | Set-ACL $currentFolder

作为替代方法,您可以使用robocopy从一个目录复制ntfs权限,然后将它们应用到另一个目录。

robocopy $currentFolder.Replace("16-17", "15-16") $currentfolder /copy:S /SECFIX

希望这有帮助。

答案 1 :(得分:0)

powershell原生的Set-ACL cmdlet非常糟糕。我建议使用可用的NTFS模块。我曾多次尝试使用Set-ACL,但它总是浪费我的时间而不是实际有用。