Используя Shell.Объект приложения покончит с временными файлами. Кроме того, вам не нужно беспокоиться, если установлена NET 4.5. Этот объект доступен начиная с Windows XP.
В приведенном ниже коде предполагается, что все папки журналов приложений находятся в одной папке. Он будет искать файлы журналов, соответствующие дате (сегодня), создаст zip-файл и скопирует файлы в него. Почтовый файл будет назван в соответствии с текущей датой.
$date_string = Get-Date -Format 'yyyyMMdd'
$zip_filename = "logs_$date_string.zip"
# Create the empty zip file
Set-Content $zip_filename ( [byte[]] @( 80, 75, 5, 6 + (, 0 * 18 ) ) ) -Encoding Byte
$zip_file = Get-Item -Path $zip_filename | ForEach-Object {
(New-Object -ComObject Shell.Application).NameSpace($_.FullName)
}
[array]$log_files = Get-ChildItem -Recurse -Filter "*_$date_string.log"
for ($i=1; $i -le $log_files.Count; $i++) {
$zip_file.CopyHere($log_files[$i-1].FullName)
# Copying is async so we need to check if it is done before continuing.
while ($zip_file.Items().Count -ne $i) { sleep 0.1 }
}
Мои предположения могут быть неверными, и вам может потребоваться внести некоторые изменения, чтобы это работало в вашей среде. Ключевым выводом из этого примера является использование оболочки.Объект приложения для создания zip-файлов.