Лучший отвечающий
Как удалить архив, созданный с помощью Compress-Archive?

Вопрос
-
В скрипте командой Compress-Archive создаётся временный архив, который отправляется по почте.
После отправки архив не нужен и его надо удалить. Но при удалении выдаётся следующая ошибка (см. ниже). Файл архива залочен Powershell, и пока оболочку не закроешь - файл не удаляется. Можно ли это как-то решить внутри одного скрипта?Remove-Item : Cannot remove item D:\TEMP\send.zip: Access to the path is denied. At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:183 char:13 + Remove-Item -Path $DestinationPath -Force -ErrorAction St ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (D:\TEMP\send.zip:FileInfo) [Remove-Item], ArgumentException + FullyQualifiedErrorId : RemoveFileSystemItemArgumentError,Microsoft.PowerShell.Commands.RemoveItemCommand
2 апреля 2019 г. 6:43
Ответы
-
Попробуйте вместо зануления переменных использовать метод dispose() у обьекта $msg
$msg.Dispose()
У меня на в тестах вроде работает
Вторая альтернатива это использование Send-MailMessage вместо кастомного обьекта, так как у упомянутого командлета не должно быть проблем с промежуточными состояниями и по завершению отработки команды он должен освобождать все с чем работал.
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 2 апреля 2019 г. 20:32
- Помечено в качестве ответа Cross13 3 апреля 2019 г. 12:29
2 апреля 2019 г. 20:29Модератор
Все ответы
-
покажите скрипт целиком
скорее всего у вас в предыдущем этапе какая-то команда не завершается на момент удаления файла
The opinion expressed by me is not an official position of Microsoft
2 апреля 2019 г. 6:56Модератор -
Вот сам скрипт:
# ------------------------------------- # Отправить файлы о работе Консультант+ # ------------------------------------- $EmailFrom = "admin@mycompany.ru" $EmailTo = "user@inet.ru" $CurrentDate = Get-Date $t = "Файлы из Консультант+" + " от " + $CurrentDate $zipname = "D:\TEMP\cons_STS" + "_" + $CurrentDate.Year + "-" + $CurrentDate.Month + "-" + $CurrentDate.Day + ".zip" Compress-Archive -Path Y:\konsultant\ADM\STS\* -DestinationPath $zipname -Force $msg = New-Object Net.Mail.MailMessage $msg.Attachments.Add("Y:\konsultant\Receive\CONS#107_760591.USR") $msg.Attachments.Add("Y:\konsultant\Receive\LAST_REC.TXT") $msg.Attachments.Add($zipname) $msg.Body = $t $msg.Subject = $t $msg.From = $EmailFrom $msg.To.Add($EmailTo) $SMTPServer = "mail.mycompany.loc" $SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587) $SMTPClient.EnableSsl = $True $SMTPClient.Credentials = New-Object System.Net.NetworkCredential("mycompany\test1", "Qaz123456"); $SMTPClient.Send($msg) Remove-Item -Path $DestinationPath -Force
2 апреля 2019 г. 7:15 -
перед удалением файла занулите $msg и $smptclient
The opinion expressed by me is not an official position of Microsoft
2 апреля 2019 г. 7:17Модератор -
Добавил перед удалением три строки:
$msg = $null $SMTPClient = $null $SMTPServer = $null
Всё равно ошибка:
PS C:\Windows\system32> C:\SEND_MAIL\test.ps1 Remove-Item : Cannot remove item D:\TEMP\cons_STS_2019-4-2.zip: The process cannot access the file 'D:\TEMP\cons_STS_2019-4-2.zip' because it is being used by another process. At C:\SEND_MAIL\test.ps1:34 char:1 + Remove-Item -Path $zipname -Force + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (D:\TEMP\cons_STS_2019-4-2.zip:FileInfo) [Remove-Item], IOException + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand
- Изменено Cross13 2 апреля 2019 г. 7:46
2 апреля 2019 г. 7:36 -
Попробуйте вместо зануления переменных использовать метод dispose() у обьекта $msg
$msg.Dispose()
У меня на в тестах вроде работает
Вторая альтернатива это использование Send-MailMessage вместо кастомного обьекта, так как у упомянутого командлета не должно быть проблем с промежуточными состояниями и по завершению отработки команды он должен освобождать все с чем работал.
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 2 апреля 2019 г. 20:32
- Помечено в качестве ответа Cross13 3 апреля 2019 г. 12:29
2 апреля 2019 г. 20:29Модератор -
Dispose помог. Файл удалился без проблем!
Спасибо!3 апреля 2019 г. 12:30