Die Liste der zu archivierenden Dateinamen befindet sich in $ files. Verwenden Sie $files.GetType()
um zu sehen, dass es ein Array ist. Verwenden Sie $files[0].GetType()
, um zu sehen, dass jedes Element ein Zeichenfolgentyp und kein Dateiobjekttyp ist.
$ files = Get-ChildItem -Pfad $ Ordner | Where-Objekt {$ _. LastwriteTime -lt (Get-Datum) .adddays (-90)}
Ich stelle mir vor, dass Sie Verzeichnisse weglassen wollen.
Das $ files-Array ist ein Array von FileInfo-Objekten, keine Strings.
Zweitens, etwas tun, um über die Liste der FileInfo Objekte zu iterieren.
[cmdletbinding()]
Param()
$folders = "H:\src\powershell\afm"
Function Zip
{
Param (
[string]$zipFile
, [string[]]$toBeZipped
)
& "C:\Program Files\7-Zip\7z.exe" A -tzip $zipFile $toBeZipped | Out-Null
}
$files = Get-ChildItem -Path $folders -File |
Where-Object {($_.LastwriteTime -lt (Get-date).adddays(-10)) -and ($_.Extension -ne ".zip")}
$files | ForEach-Object {
Write-Verbose "Working on file $_"
$file_year = $_.LastwriteTime.Year
$file_month = $_.LastwriteTime.Month
Write-Verbose "file_month is $file_month"
Zip "$folders\$file_year$file_month.zip" "$folders\$_"
If (Test-Path "$folders\$file_year$file_month.zip")
{
### Remove-Item $_q
}
}
Es scheint, dass das Problem ist, dass es nichts gibt, jede Datei zu archivieren, um sie zu archivieren. Es gibt kein ForEach-Objekt.
Es gibt kein LastWriteTime für ein Array-Objekt, nur für ein FileInfo-Objekt.