Powershell - 循环与break / goto,递归函数?

时间:2016-03-17 00:08:43

标签: function loops powershell recursion

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

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

如果我需要一个递归函数,或者在/ 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:\temp\filelist\file-$filename.csv"
        $filename ++
        }       
   }
}

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

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

我很高兴没有给出直接的答案,但是给出一些关于我需要做什么的提示会很棒(这不是功课,我喜欢学习powershell ha :))

1 个答案:

答案 0 :(得分:1)

我想我会在另一个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:\Path\To\Export-$x.csv -NoType
}