Powershell - 带有中断/转到,递归函数的循环


有点

困惑,因为我需要用什么来实现我的目标。这是我需要做的:

  • 递归地获取文件列表
  • 获取文件名、上次写入日期、所有者并附加到数组
  • 当数组达到 500 时,将其输出为 csv 文件名.csv。每 500 行输出都有一个文件
  • 继续,输出包含详细信息的文件(500 行)直到结束

如果我需要一个递归函数,或者可以做一些棘手的while/do/for循环工作,我并没有从概念上掌握。

这是我到目前为止所拥有的:

$array = @()
$files = ls c:users –recurse
$counter = 0
$filename = 0
foreach ($file in $files){
   if($counter -ne 500){
        write-host "Doing loop, counter is " $counter
        $owner = Get-Acl $file.FullName
        $data = new-object -type PSObject
        $data | add-member -membertype noteproperty -name "File" -value $file.FullName
        $data | add-member -membertype noteproperty -name "LastWriteTime" -value $file.LastWriteTime
        $data | add-member -membertype noteproperty -name "Created" -value $file.CreationTime
        $data | add-member -membertype noteproperty -name "Owner" -value $file.Owner
        $array += $data
        $counter ++    
   else($counter -eq 500){
        $counter = 0
        $array = @()
        $array | export-csv "c:tempfilelistfile-$filename.csv"
        $filename ++
        }       
   }
}

我实际上尝试了很多不同的东西,循环类型等。我只是无法安静地弄清楚如何让脚本"转到 for 循环的开始",因为我的理解还没有。

我限制在 500 行的原因是因为它将在具有数百万个文件的文件服务器上运行,而一个简单的 get-childitem 并不是安静地优雅地处理它。

我很高兴没有得到直接的答案,但给一些关于我需要做什么的提示会很棒(这不是家庭作业,我喜欢学习 powershell 哈:))

我想

我会在另一个For循环中嵌套一个For循环来执行您想要的操作。像这样:

For($x=0;$x -lt $Files.count;$x=$x+500){
    $Array=@()
    For($y=0;$y -lt 500; $y++){
        $Array += $Files[($x+$y)] | Select FullName,LastWriteTime,CreationTime,@{l='Owner';e={($_|Get-ACL).Owner}}
    }
    $Array|Export-CSV C:PathToExport-$x.csv -NoType
}

最新更新