首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建文件夹和设置权限- Powershell

创建文件夹和设置权限- Powershell
EN

Stack Overflow用户
提问于 2022-11-11 19:10:11
回答 1查看 45关注 0票数 1

我试图在一个PowerShell脚本中创建一个文件夹并设置这些文件夹的权限。脚本在第一次运行时不会更改权限。我必须运行脚本两次才能设置权限。不知道是什么导致了这种奇怪的行为。

代码语言:javascript
复制
$desired_install_loc = ${env:ProgramFiles}

$base_path = Join-Path $desired_install_loc 'Base_Test';
$install_path = Join-Path $base_path 'Install_Test';




function Create-Directory {
    if( !(Test-Path $base_path )){
        New-Item -ItemType Directory -Force -Path $base_path;
    }

    if( !(Test-path $install_path) ){
        New-Item -ItemType Directory -Force -Path $install_path;
    }
}

function Replace-FolderPerms($folder_path) {
    $acl = (Get-Acl -Path $folder_path);
    $add_rule = (New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Users","Read", "Allow"));

    $acl.SetAccessRuleProtection($true,$true)
    $acl.SetAccessRule($add_rule)

    Set-ACL $folder_path $acl;
}

Create-Directory;

Replace-FolderPerms $base_path;
Replace-FolderPerms $install_path; 

创建文件夹,但之后不设置权限。

EN

回答 1

Stack Overflow用户

发布于 2022-11-11 20:30:55

我试图通过设置SetAccessRuleProtection($true, $true)来保留旧权限。将第二个参数设置为$false并完全构建权限就完成了这一任务。

代码语言:javascript
复制
$desired_install_loc = ${env:ProgramFiles}

$base_path = Join-Path $desired_install_loc 'Base_Test';
$install_path = Join-Path $base_path 'Install_Test';

function Create-Directory {
    if( !(Test-Path $base_path )){
        New-Item -ItemType Directory -Force -Path $base_path;
    }

    if( !(Test-path $install_path) ){
        New-Item -ItemType Directory -Force -Path $install_path;
    }
}

function Replace-FolderPerms($folder_path) {
    $acl = (Get-Acl -Path $folder_path);
    
    $add_rule = (New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Users","Read", "Allow"));
    $add_rule_admin = (New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Administrators", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow"));
    $add_rule_system = (New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow"));

    $acl.SetAccessRuleProtection($true,$false);
    
    $acl.AddAccessRule($add_rule);
    $acl.AddAccessRule($add_rule_admin);
    $acl.AddAccessRule($add_rule_system);
    
    $acl | Set-ACL -Path $folder_path;
}

Create-Directory;

Replace-FolderPerms $base_path;
Replace-FolderPerms $install_path; 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74407132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档