我正在尝试运行以下代码,从.csv文件导入目录列表(如果选择作为参数),然后执行foreach循环,以确定.csv文件中列出的目录中在过去XX天中修改了哪些文件。
但是,$modfiles变量似乎在每次迭代中都被覆盖,而不是被追加。
正在导入的.csv中有3个目录,但我的输出只显示了最后一个导入目录中的相关文件。他们是去附加$modfiles吗?
CSV内容:

$importDirs = Import-Csv $importCsv
foreach ($importDir in $importDirs){
$modfiles = Get-ChildItem -Path $importDir.Directory -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $modDate }
}输出:

下面是整个脚本:
[CmdletBinding(DefaultParameterSetName='ManualDirectory')]
param (
[Parameter(Mandatory = $true, ParameterSetName = 'ManualDirectory')]
[System.String]
$dir,
[Parameter(Mandatory = $true, ParameterSetName = 'ImportDirectory')]
[System.String]
$importCsv,
[Parameter(Mandatory=$true)]
[int]$days,
[switch]$exportCsv,
[switch]$console
)
Process {
#Clear-Host
$totSize = 0
$totFiles = 0
$modDate = (Get-date).AddDays(-$days).Date
If ($dir){
$modfiles = Get-ChildItem -Path $dir -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $modDate }
}
If ($importCsv){
$importDirs = Import-Csv $importCsv
foreach ($importDir in $importDirs){
$modfiles = Get-ChildItem -Path $importDir.Directory -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $modDate }
}
}
If ($exportCsv){
$modfiles | Select-Object -Property FullName, Length,LastWriteTime | Export-Csv -Path .\modFiles.csv -NoTypeInformation
}
foreach ($file in $modfiles){
$totFiles = $totFiles + 1
$totSize = $totSize + $file.Length
If ($console -eq $true){
Write-Host $file.FullName
}
}
If ($totSize -lt 1MB){
$outSize = $totSize/1KB
$unit = "KB"
}
elseif (($totSize -ge 1MB) -and ($totSize -lt 1GB)){
$outSize = $totSize/1MB
$unit = "MB"
}
elseif ($totSize -ge 1GB){
$outSize = $totSize/1GB
$unit = "GB"
}
$outRound = [math]::Round($outSize,2)
Write-Host $totFiles "Files"
Write-Host $outRound $unit
}发布于 2020-02-18 18:02:15
$importDirs = Import-Csv $importCsv
foreach ($importDir in $importDirs){
$modfiles = Get-ChildItem -Path $importDir.Directory -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $modDate }
}每次循环$importDirs时,都会为$modfiles分配一个值。每次迭代时,您都会重写前一次迭代中的值。
如果需要保存所有值的列表,请使用
$modfiles = $modfiles, (Get-Childitem ...)
# or
$modfiles += Get-ChildItem ...https://stackoverflow.com/questions/60286791
复制相似问题