Powershell创建文件夹并分配安全用户

时间:2019-11-13 19:00:24

标签: 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

1 个答案:

答案 0 :(得分:0)

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

 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**
        }

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

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

相关问题