powershell - 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
解决方案
如此处所述,您实际上对所有文件夹进行了递归:
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 行,您要做的是使用新名称创建新的父目录并将所有子文件夹移动到新目录,无需重命名。
您需要管理员权限,以管理员身份运行代码,然后重试。
推荐阅读
- python - re.sub 括号后的正则表达式 \b
- java - xml-apis 依赖项的许可证问题
- jquery - 在循环外添加 jquery 值(创建实时出价)
- ruby-on-rails - Rails API 接受具有两种有效负载的帖子
- deep-learning - 深度学习:类标签不在顺序范围内
- directx-12 - xrEndFrame 上的奇怪 OpenXR 行为
- macos - 从“macos system_profiler command”输出中获取设备类型(令牌、USB 闪存驱动器、鼠标)
- python - TfIdfVectorizer 在 GPU 上较慢(cuml 与 sklearn 实现)
- rust - 如何安全地创建一个不透明的结构,然后在 FFI 边界上释放它?
- android - 未知主机“dl.google.com”。您可能需要在 gradle un Android 4.2 中调整代理设置