2017-11-13 441 views
0

PowerShellを初めて使用しました。Powershell Compress-Archive:プロセスが別のプロセスで使用されているため、ファイルにアクセスできません。

私はパス(内部にサービスウィンドウが走っている)を圧縮したいと思います。

サービスが停止した場合、サービスが実行されている場合、それは、完璧に動作しますが、私は例外があります。

それは別の プロセスによって使用されているため、プロセスはファイルにアクセスできませんが。

ただし、7-zipでジップすると、例外はありません。

私のコマンドは非常に簡単です:

Compress-Archive [PATH] -CompressionLevel Optimal -DestinationPath("[DEST_PATH]") -Force 

あなたはこの例外なくタスクを実行するために任意のアイデアを持っていますか?

+0

は、この問題を回避するためのPowerShellから7zipをを使用しようと、https://gallery.technet.microsoft.com/scriptcenter/PowerShell-and-7Zipを参照してください-83020e74 – Avshalom

+0

_この例外を除いてタスクを実行することをお考えですか?_スナップショットを使用していますか? – Clijsters

+0

変更されていないファイル(.dll)にエラーがあります。スナップショットは問題ではないはずです – Bob

答えて

1

別のプロセスで使用されているファイルにアクセスするには、Volume Shadow Copy Serviceを使用してスナップショットを作成するのがよい方法です。

そうするために、一つは単にPowerShells WMIコマンドレットを使用することができます。

$Path = "C:/my/used/folder" 
$directoryRoot = [System.IO.Directory]::GetDirectoryRoot($Path).ToString() 

$shadow = (Get-WmiObject -List Win32_ShadowCopy).Create($directoryRoot, "ClientAccessible") 
$shadowCopy = Get-WmiObject Win32_ShadowCopy | ? { $_.ID -eq $shadow.ShadowID } 
$snapshotPath = $shadowCopy.DeviceObject + "\" + $Path.Replace($directoryRoot, "") 

は今、あなたはあなたのCompress-Archive通話に-Pathとして$snapshotPathを使用することができます。

この方法は、シンボリックリンクを使用してバックアップを作成する場合にも使用できます。 そこから、リンクされたフォルダを使用して、バックアップされたファイルをコピーしたり、それらのアクセス例外なしで圧縮することができます。

私は似機能と、この要旨に小さなコマンドレットを作成しました:Backup.ps1

関連する問題