临时取得文件夹的所有权

时间:2018-09-04 12:27:01

标签: powershell windows-server-2012 powershell-v4.0

我需要临时拥有个人资料文件夹的所有权,以便向安全组的成员添加权限(只读)。我想知道如何在Powershell中实现这一目标。

我以前使用过TakeOwn.exe,但是由于它不能将所有权退还给原始所有者,因此我不能将其用于此。

我尝试使用名为PowerShellAccessControl的模块,该模块在technet上找到。

Import-Module $PSScriptRoot\modules\PowerShellAccessControl\PowerShellAccessControl.psd1

$path = "$PSScriptRoot\profileFolders\profile"

$AddAceParams = @{
    Principal = "SecurityGroup"
    FolderRights = "Read"
}

Get-SecurityDescriptor $path -PacSDOption (New-PacCommandOption -BypassAclCheck) | ForEach-Object {
    $OriginalOwner = $_.Owner

    $_ | Set-Owner -PassThru -Apply | 
        Add-AccessControlEntry @AddAceParams -PassThru |
        Set-Owner -Principal $OriginalOwner -Apply 
}

但是此代码只会导致以下错误:

  

New-PacCommandOption:术语“ New-PacCommandOption”未被识别为cmdlet,函数,脚本文件或可运行程序的名称。检查名称的拼写,或者是否包含路径,请确认路径正确,然后重试。

我不知道我是否应该继续该模块,或者是否有更好的方法。

1 个答案:

答案 0 :(得分:2)

在处理文件系统权限时,我倾向于使用NTFSSecurity模块,它写的很好,到目前为止,我已经取得了很好的成功。

$path = "C:\folder"
$OriginalPermissions = Get-NTFSOwner $path

Set-NTFSOwner -Path $path -Account $env:USERNAME
Add-NTFSAccess -Path $path -Account 'DOMAIN\SecurityGroup' -AccessRights Read
Set-NTFSOwner -Path $path -Account $OriginalPermissions.Owner

注意:您确实需要安装模块,如果您使用的是Powershell的现代版本,这很容易,因为您可以使用Install-Module -Name NTFSSecurity。如果是旧版本,则需要手动下载并安装模块。


编辑:

另一种选择是使用Enable-Privileges来授予您的帐户Backup, Restore, and Security的特权。

有了这些,您将能够编辑权限,而您自己的帐户没有对数据的明确权限。上面的链接中的文档中介绍了这些命令的使用。确保启用它们后Disable-Privileges {{1}},因为这不是一直使用它们的好习惯。