0
現在、特定のファイルを圧縮し、APIを介してWebサーバーにアップロードしてからローカルに再度削除するスクリプトを作成しています。作成後にZIPファイルを削除するには?ファイルの使用が継続されています
これが私たちの現在のコードです:
$sourceFile = "D:\myfile.txt"
$destinationFile = "D:\myfile.zip"
function Add-Zip
{
Param([string]$zipfilename)
if (-not (Test-Path($zipfilename)))
{
Set-Content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
$shellApplication = New-Object -Com Shell.Application
$zipPackage = $shellApplication.NameSpace($zipfilename)
foreach ($file in $input)
{
$zipPackage.CopyHere($file.FullName)
Start-Sleep -Milliseconds 500
}
}
dir $sourceFile | Add-Zip $destinationFile
Write-Host "zip created"
# code to upload the zip here
Remove-Item $destinationFile
Write-Host "zip removed"
それは完全にzipファイルを作成し、アップロードはあまりにも動作しますが、試してはRemove-Item
を使用してzipファイルを削除するとき、我々は
は、Remove-項目を取得します:アイテムD:\ myfile.zipを削除できません:プロセスは別のプロセスで使用されているため、ファイル 'D:\ myfile.zip'にアクセスできません。
どうすればこのロックを解除できますか?後でファイルを削除できるように.Dispose()
できることはありますか?
ShellApplicationオブジェクトは、おそらくあなたがちょうど '削除-変数を-Forceを追加する必要があるかもしれません、ファイル上に保持しています-name shellApplication'を 'Add-Zip'関数の最後に追加して、これをクリーンアップします。 –
'foreach($ file in $ input)' - $ inputとは何ですか? –
私はこれを複製できません。 'Shell.Application'はファイルにロックを保持していません。プロセスエクスプローラを使用して、それが何か他のものでないことを確認してみてください。(AVかもしれませんか?) –