How to compress multiple files into one zip with PowerShell?
The problem is that Get-ChildItem returns instances of the System.IO.FileInfo class, which doesn't have a property named Path
. Therefore the value cannot be automatically mapped to the Path
parameter of the Write-Zip cmdlet through piping.
You'll have to use the ForEach-Object cmdlet to zip the files using the System.IO.FileInfo.FullName property, which contains the full path:
Get-ChildItem -Path C:\Logs | Where-Object { $_.Extension -eq ".txt" } | ForEach-Object { Write-Zip -Path $_.FullName -OutputPath "$_.zip" }
Here's a shorter version of the command using aliases and positional parameters:
dir C:\Logs | where { $_.Extension -eq ".txt" } | foreach { Write-Zip $_.FullName "$_.zip" }
Related resources: