2016-09-05 5 views
0

仮想マシンを関連ファイルとともに削除するために、PowerShellで次のコマンドを実行しようとしました。プロセスによって使用されているためファイルを削除できない

Get-VM "VM Name" | %{ 
    Stop-VM -VM $_ -Force; 
    Remove-VM -VM $_ -Force; 
    Remove-Item -Path $_.Path -Recurse -Force 

私の問題は、いくつかのファイル(スナップショット)がまだ別のプロセスで使用されていたために、スクリプトがエラーになったということです。これに加えて、.vhdxファイルは削除されませんでした。誰もこの問題を解決する方法を教えてくれますか?

+0

他のプロセスを終了させて​​ください。 [Remove-Item PowerShellのエラーを回避する方法 "プロセスはファイルにアクセスできません"?](http://serverfault.com/a/699945)またはhttp://thomasardal.com/deleting-contents-of-a-folder -containing-files-with-open-file-handles-using-powershell/ – wOxxOm

+0

この場合、上記のスクリプトを上記のスクリプトにどのように組み込むことができますか? 'get-process | foreachの{ $はpName = $ _ 場合($ pName.Path様($のINSTALL_PATH + '*')){ ストッププロセス$ pName.id -Force -ErrorAction SilentlyContinueという }削除品目-Force -Recurse $ INSTALL_PATH' –

+0

@wOxxOmこの場合、他のプロセスがハイパーバイザーである可能性が高いので、私はそれをお勧めしません。スナップショットが削除前にイメージにマージされることによって問題が発生している可能性があります。はい、それは無意味ですが、IIRCはHyper-Vがこれらの処理をどのように処理しているかを示しています。 –

答えて

0

(これは、それがマージを完了するために、いつか必要があり、VMのスナップショットをマージする必要があります)、これを試してみてください。

Get-VM "VM Name" | %{Stop-VM -VM $_ -Force;Remove-VMSnapshot -vm $_;Remove-VM -VM $_ -Force;Remove-Item -Path $_.Path -Recurse -Force;} 

または(マージすることなくVMのファイルを削除するには、VMMサービスを停止):

Get-VM "VM Name" | %{Stop-VM -VM $_ -Force;Stop-Service -Name vmms -Force;Remove-Item -Path $_.Path -Recurse -Force;Start-Service -Name vmms ; start-service -Name vmhostagent;start-sleep 3;Remove-VM -VM $_ -Force} 

また、私のテストラボは2012R2ハイパーvホストです。 "path"フォルダに他のVMのファイルが含まれていないことを確認してください。

+0

このスクリプトは、指定されたパスにあるすべてのファイルを削除しますか?私のVMのすべての.vhdxファイル/スナップショットが同じフォルダ内にある場合はどうなりますか?このスクリプトはすべてを削除しますか? –

+0

はい。 VMに、すべてのファイルを保存する独自のフォルダがあるとします。 あなたのケースに合わない場合は、私は再度書き直そうとします。 –

+0

必要はありません。Powershellコマンドを実行するよりも、手動で.vhdxファイルとスナップショットを削除する方が簡単であることがわかりました。それにもかかわらず答えとしてマークします。ありがとうございました! –

関連する問題