ForEach循环中正在重写的变量-Powershell

ForEach循环中正在重写的变量-Powershell,powershell,foreach,powershell-5.0,Powershell,Foreach,Powershell 5.0,我正在尝试运行以下代码从.csv文件(如果选择作为参数)导入目录列表,然后执行foreach循环以确定在.csv文件中列出的目录中最近XX天修改了哪些文件 然而,$modfiles变量似乎在每次迭代中都会被覆盖,而不是被追加 正在导入的.csv中有3个目录,但我的输出仅显示上次导入目录中的相关文件。他们需要附加$modfiles吗 CSV内容: 输出: 以下是整个脚本: [CmdletBinding(DefaultParameterSetName='ManualDirectory')] pa

我正在尝试运行以下代码从.csv文件(如果选择作为参数)导入目录列表,然后执行foreach循环以确定在.csv文件中列出的目录中最近XX天修改了哪些文件

然而,$modfiles变量似乎在每次迭代中都会被覆盖,而不是被追加

正在导入的.csv中有3个目录,但我的输出仅显示上次导入目录中的相关文件。他们需要附加$modfiles吗

CSV内容:

输出:

以下是整个脚本:

[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
}
每次循环$importDirs时,都会为$modfiles指定一个值。每次迭代,您都会覆盖上一次迭代中的值

如果需要保留所有值的列表,请使用

$modfiles = $modfiles, (Get-Childitem ...)

# or
$modfiles += Get-ChildItem ...

使用+=运算符进行追加。谢谢,正是这些简单的事情让我明白了。
$importDirs = Import-Csv $importCsv
foreach ($importDir in $importDirs){
            $modfiles = Get-ChildItem -Path $importDir.Directory -Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -ge $modDate }
}
$modfiles = $modfiles, (Get-Childitem ...)

# or
$modfiles += Get-ChildItem ...