web-dev-qa-db-ja.com

powershellを使用してUSB外付けドライブをマウント解除する

PowerShellを使用して外付けUSBドライブのマウントを解除しようとしていますが、これを正常に実行できません。次のスクリプトは私が使用するものです。

#get the Win32Volume object representing the volume I wish to eject 

$drive = Get-WmiObject Win32_Volume -filter "DriveLetter = 'F:'"

#call dismount on that object there by ejecting drive

$drive.Dismount($Force , $Permanent)

次に、コンピューターをチェックして、ドライブがアンマウントされているかどうかを確認しますが、マウントされていません。

ブールパラメータ$ forceと$ permanentは、さまざまな順列で試されましたが、役に立ちませんでした。 paramsが切り替えられると、dismountコマンドによって返される終了コードが変わります。

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2

終了コード2のドキュメントは、マウント解除できない理由として既存のマウントポイントがあることを示しています。存在するマウントポイントのみをマウント解除しようとしているので、この終了コードが何を伝えようとしているのかわかりません。

同様の問題が発生している人のためにWebをすでに探索しているので、試すべき追加コマンドが1つだけ見つかりました。それは次のとおりです。

# executed after the .Dismount() command

$drive.Put() 

この追加のコマンドは役に立ちません。

やることが足りないので、どなたでもご協力いただければ幸いです。

12
JB.

Pkのサンプルのように、半分焼きたてのオープンリファレンスを残さないクリーンなソリューションは次のとおりです。

  $driveEject = New-Object -comObject Shell.Application
  $driveEject.Namespace(17).ParseName("E:").InvokeVerb("Eject")

http://sushihangover.blogspot.nl/2012/02/powershell-eject-local-or-remote.html から取得

11
Koen Zomers

私はPowerShell側から答える素晴らしい仕事をすることはできません。あなたは _mountvolの動作方法 を見たいと思うかもしれません。さまざまな程度の降車があります。

MountvolまたはMountvol /?

ボリュームの名前、グローバル一意識別子(GUID)、および場所を表示します。

Mountvol [drive:] path VolumeName

新しいボリュームマウントポイントを作成します。マウントポイントのソースとしてドライブ文字のルートディレクトリまたは既存の空のNTFSディレクトリを指定し、ターゲットとしてボリューム名を指定します。

Mountvol [ドライブ:]パス/ D

既存のボリュームマウントポイントを削除します。

Mountvol [ドライブ:]パス/ L

特定のボリュームマウントポイントのボリューム名を一覧表示します。

古いハードウェアのドライブマウントを削除するのが面倒であり(フラッシュドライブを読み取る)、カスタムGUIのショートカットに干渉していて、マウントポイントを明示的にしか言及できない古いデスクトップでデバイスを並べ替えるために、VBScriptで必要なものと同様のことを試みました( D:、E:、F :)特定の目的で。これは非常に苛立たしいものになり、mountvolの入出力を使用してマウントを解除して再マウントし、正常に機能していることを確認して変更を続行する必要があります。私よりも幸運を祈っています。

1
songei2f