0

首先让我说我对脚本非常陌生!基本上我要做的是编写一个脚本来创建所有这些文件:对于上一年和今年的文件中的 13-14,所以我需要一个变量,当我明年运行脚本时它会14-15 岁。最上面的文件夹是 AD、CC、DC、FS、IT、OP:

例如

  • C:\Test\AD\13-14\Audit\Fir
  • C:\测试\CC\13-14\OSA
  • C:\Test\DC\13-14\供应商
  • C:\测试\FS\13-14\维护
  • C:\Test\IT\13-14\Detail
  • C:\Test\OP\13-14\Training

(还有更多文件夹,这只是一个示例)

到目前为止,我编写的创建所有这些文件夹的脚本是:

$Users = Get-Content "C:\Users\david\Desktop\PowershellFoldersDB.txt" 
ForEach ($user in $users)
{
    $newPath = Join-path "C:\Test" -childpath $user
    New-Item $newPath -type directory
}

好的,现在我要添加的是脚本是 icacls 使处于分类顶层的文件夹被锁定,这样就不能创建新文件夹,不能删除任何文件夹,也不能重命名。但是对于顶层之下的文件夹,如果我需要的话,我希望能够添加新文件夹。任何帮助将不胜感激。谢谢

4

1 回答 1

0

您正在寻找的是Get-ACLSet-ACL。您可以根据需要手动设置一个文件夹,然后对其运行Get-ACL以从中提取所有安全信息。然后,您可以将其应用于新文件夹,因为它们是使用Set-ACL. 所以像:

[int]$YY = Get-Date -f "yy"
[String]$YY = "$($YY-1)-$YY"
$ACL = Get-ACL C:\Test\Template
$ACLSub = Get-ACL "C:\Test\Template\Sub"
"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 恕我直言中手动设置所有权限要简单得多。

编辑:好吧,考虑到您在文本文件中有一个文件夹列表,这实际上变得更简单了。

$Folders  = Get-Content "C:\Users\david\Desktop\PowershellFoldersDB.txt" 
[int]$YY = Get-Date -f "yy"
[String]$YY = "$($YY-1)-$YY"
$ACL = Get-ACL C:\Test\Template
$ACLSub = Get-ACL "C:\Test\Template\Sub"
$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
}
于 2014-04-29T15:44:06.510 回答