有点困惑,因为我需要用它来实现我的目标。这是我需要做的:
如果我需要一个递归函数,或者在/ 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 :))
答案 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
}