让我首先说我对脚本非常陌生!基本上,我想做的是编写一个脚本,创建所有这些文件:对于文件中的13-14,它是上一年和当前一年,所以我需要一个变量,当我明年运行脚本时,它将是14-15。最上面的文件夹是AD、CC、DC、FS、IT、OP:
例如
- C: \Test\AD\13-14\Audit\Fir
- C: \Test\CC\13-14\OSA
- C: \测试\ DC \ 13-14\供应商
- C: \测试\ FS\ 13-14\维护
- C: \测试\IT\13-14\详细信息
- C: \Test\OP\13-14\培训
(还有更多的文件夹,这只是一个例子(
到目前为止,我写的创建所有这些文件夹的脚本是:
$Users = Get-Content "C:UsersdavidDesktopPowershellFoldersDB.txt"
ForEach ($user in $users)
{
$newPath = Join-path "C:Test" -childpath $user
New-Item $newPath -type directory
}
好吧,现在我想添加的是,这个脚本是icacls将处于顶级分类的文件夹锁定,这样就不会创建新文件夹,也不会删除新文件夹,更不会重命名新文件夹。但对于顶层以下的文件夹,如果我也需要的话,我希望能够添加新的文件夹。如有任何帮助,我们将不胜感激。感谢
您要查找的是Get-ACL
和Set-ACL
。您可以根据需要手动设置一个文件夹,然后运行Get-ACL
以从中提取所有安全信息。然后,您可以将其应用于使用Set-ACL
创建的新文件夹。所以类似于:
[int]$YY = Get-Date -f "yy"
[String]$YY = "$($YY-1)-$YY"
$ACL = Get-ACL C:TestTemplate
$ACLSub = Get-ACL "C:TestTemplateSub"
"AD","CC","DC","FS","IT","OP" | %{
$CurrentRoot = New-Item "C:Test$_" -ItemType Directory
$CurrentSub = New-Item "$CurrentRoot$YY" -ItemType Directory
$CurrentRoot | Set-ACL -AclObject $ACL
$CurrentSub | Set-ACL -AclObject $ACLSub
}
然后,您只需要提前设置Template文件夹和其中的Sub文件夹,就可以获得正确的安全权限,并且一切就绪。这比在PowerShell IMHO中手动设置所有权限要简单得多。
编辑:考虑到文本文件中有一个文件夹列表,这实际上会变得更简单。
$Folders = Get-Content "C:UsersdavidDesktopPowershellFoldersDB.txt"
[int]$YY = Get-Date -f "yy"
[String]$YY = "$($YY-1)-$YY"
$ACL = Get-ACL C:TestTemplate
$ACLSub = Get-ACL "C:TestTemplateSub"
$folders |?{$_ -match "^(C:\Test\..)(\d{2}-d{2})(\.*)$"}|%{New-Item "$($Matches[1])$YY$($Matches[3])" -ItemType directory -force | Out-Null}
GCI "$($matches[1]).." -Directory | %{
$_ | Set-ACL -AclObject $ACL
GCI $_.FullName | Set-ACL -AclObject $ACLSub
}