首页 > 解决方案 > Powershell 创建文件夹并分配安全用户

问题描述

此功能的目标是 1) 复制模板文件夹,2) 重命名该模板文件夹,3) 分配文件夹安全用户。

我的代码遇到的问题是:

1) 不重命名复制的文件夹。我只想重命名父文件夹而不是子文件夹。

**Rename-Item -NewName { $_.Name -replace ("Template" -f $ProjectName)} -Verbose**

2) 我收到 $TargetFolder.SetAccessRule($AccessRule) 错误

Exception calling "SetAccessRule" with "1" argument(s): "The trust relationship between this workstation and the primary domain failed.
"
At C:\Users\ProjectFolderCreation_TEST.ps1:40 char:6
+      $TargetFolder.SetAccessRule($AccessRule)

下面是我的完整代码。

Function FolderCreation{ 
Param (
       # [Parameter (Mandatory=$true)] [STRING] $region,
        [Parameter (Mandatory=$true)] [STRING] $env,
        #[Parameter (Mandatory=$true)] [STRING] $server,
        [Parameter (Mandatory=$true)] [STRING] $ProjectCode

        )


 $TemplatePath = "C:\Desktop\FunctionInputs\PRJ"

 $NetApp = "C:\Users\Desktop\FunctionOutputs\ProjectFolders\"+$env 

 $ProjectName = "$($ProjectCode)"

 $ProjectFolder = $NetApp+"\$ProjectName"
 #$ProjectFolder

 $AdminAccess = "domain\GP_"+$ProjectName+"_ADMIN_LCL"
 #$AdminAccess

 if(Test-Path -Path $TemplatePath) {
     Get-ChildItem $TemplatePath -Filter *Template* -Recurse |
           Copy-Item -Destination $NetApp -Recurse -Verbose |
           **Rename-Item -NewName { $_.Name -replace ("Template" -f $ProjectName)} -Verbose**
        }


 if(Test-Path -Path $ProjectFolder){
     #get actual acl (access control list) entry 
     $TargetFolder = Get-Acl $ProjectFolder

     #configuring new acl
     $AdminAccess = "domain\GP_$ProjectName_ADMIN_LCL"
     $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($AdminAccess, "FullControl", "ContainerInherit, ObjectInherit", "None","Allow")

     #setting new acl
     **$TargetFolder.SetAccessRule($AccessRule)** 
     $TargetFolder | Set-Acl "$ProjectFolder" -Verbose

     #check if new entry was added 
     Get-Acl "$ProjectFolder" | fl 
        }
else{
    Write-Host ( $ProjectFolder +" does not exists")
    }

}
FolderCreation

标签: powershell

解决方案


如此处所述,您实际上对所有文件夹进行了递归:

 if(Test-Path -Path $TemplatePath) {
     Get-ChildItem $TemplatePath -Filter *Template* -Recurse |
           Copy-Item -Destination $NetApp -Recurse -Verbose |
           **Rename-Item -NewName { $_.Name -replace ("Template" -f $ProjectName)} -Verbose**
        }

删除 Rename-Item 行,您要做的是使用新名称创建新的父目录并将所有子文件夹移动到新目录,无需重命名。

您需要管理员权限,以管理员身份运行代码,然后重试。


推荐阅读