Powershell CreateFromDirectory进程无法访问文件,因为它正由另一个进程使用

时间:2017-07-03 17:48:17

标签: c# windows powershell server windows-server-2012

我在Windows Server 2012R2上有大量的500GB索引文件,这些文件正由应用程序不断更新。

我必须使用PowerShell压缩文件,但是当我尝试使用以下代码片段对其进行压缩时,我会遇到以下异常:

  

使用“4”参数调用“CreateFromDirectory”的异常:“进程无法访问文件'E:\ Program Files(x86)\ Application Folder \ File \ Status.FCS',因为它正被使用   通过另一个过程。“

$zip = "E:\Folder\File.zip"
$can = "E:\Program Files (x86)\Application Folder\File

Import-Module AWSPowerShell

# functions
function ZipFiles( $zipfilename, $sourcedir )
{
    Add-Type -Assembly System.IO.Compression.FileSystem
    $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
    [System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir,
    $zipfilename, $compressionLevel, $false)
}

ZipFiles $zip $can

如果我使用Windows GUI压缩文件,我没有任何问题,但只有在我使用PowerShell脚本时才会出现问题。此外,如果我停止应用程序服务,PowerShell脚本工作正常(我在prod环境中无法做到)。

其中一个解决方案是复制带有500Gb索引的文件夹并压缩它(这应该可以工作),但我的Windows服务器上没有足够的磁盘空间来执行此操作。

在使用PowerShell脚本写入锁定时,是否有任何压缩文件的解决方案?

1 个答案:

答案 0 :(得分:0)

您需要为zip文件设置其他目录:[System.IO.Directory]::SetCurrentDirectory($inPath)

Function ZipFiles( $zipFileName, $pathTarget )
{
   Add-Type -Assembly System.IO.Compression.FileSystem
   # Emplacement de sortie
   [System.IO.Directory]::SetCurrentDirectory($inPath)
   $compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
   [System.IO.Compression.ZipFile]::CreateFromDirectory($pathTarget, $zipFileName, $compressionLevel, $false)

}