質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

2回答

621閲覧

仮想ドライブかハードウェアドライブか判別したい

kamikazelight

総合スコア305

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2018/09/14 03:12

編集2018/09/14 04:04

前提・実現したいこと

仮想ドライブなのか
ハードウェアドライブなのか
を判別したいです。

出来れば仮想ドライブのルートディレクトリを取得したいです。

発生している問題

"ネットーワークドライブの割当解除" or "仮想ドライブをアンマウント" をする
関数を作りたいのですが
仮想ドライブ か ハードウェアドライブなのか
判別が出来ません。

該当のソースコード

powershell

1function _Set_NetDrive ([string]$Name, [string]$Root) { 2 [OutputType([bool])] 3 $null = if(!(_Remove_NetDrive -Name $Name)) { 4 return $false 5 } 6 #$null = New-PSDrive -Name $Name -PSProvider FileSystem -Root $Root -Persist 7 #関数化すると関数の終了時点で解除されてしまう等問題が多発したため今は利用しない 8 $ErrorActionPreference = "silentlycontinue" 9 if($Root.Substring(0,2) -eq "\") 10 { 11 $Net = net use $($Name + ":") $Root 12 } 13 else 14 { 15 $null = subst $($Name + ":") $Root 16 #成功してても$nullが帰ってきたため フラグを立てる 17 $Net = $true 18 } 19 $ErrorActionPreference = "continue" 20 if($Net -eq $null) { 21 return $false 22 } 23 $null = net use /persistent:yes 24 return $true 25} 26 27function _Remove_NetDrive ([string]$Name) { 28 [OutputType([bool])] 29 $null = switch ($true) 30 { 31 {$(_Get_PSDriveInfo -Name $Name) -ne $null} { 32 if($($(Get-WMIObject -query $("Select * From Win32_LogicalDisk Where DeviceID='" + $Name + ":' and DriveType = 4")).ProviderName) -as 'bool') 33 { 34 #ネットワークドライブの割当解除 35 net use $($Name + ":") /delete /y 36 } 37 else 38 { 39 #仮想ドライブか判断できない 40 #仮想ドライブの解除 41 Subst $($Name + ":") /d 42 } 43 #Remove-PSDrive $Name 44 } 45 {$(_Get_PSDriveInfo -Name $Name) -ne $null} { 46 return $false 47 } 48 } 49 return $true 50}

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

要は Windows API の GetDriveInfo() で得られる DriveInfo さえあれば判定できます。

ので、PowerShell からこれを使うサンプルがこちら

これを参考にすればよいのでは。

投稿2018/09/14 04:24

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamikazelight

2018/09/14 04:44 編集

確認してみたのですが仮想ドライブとハードウェアドライブの差が見えません。 Name : D:\ DriveType : Fixed DriveFormat : NTFS IsReady : True AvailableFreeSpace : 103676694528 TotalFreeSpace : 103676694528 TotalSize : 114494599168 RootDirectory : D:\ VolumeLabel : DATA Name : Z:\ DriveType : Fixed DriveFormat : NTFS IsReady : True AvailableFreeSpace : 103676694528 TotalFreeSpace : 103676694528 TotalSize : 114494599168 RootDirectory : Z:\ VolumeLabel : DATA zが仮想ドライブなのですがdと見比べてもわかりません。 --追記 ZはDドライブ内のフォルダを仮想ドライブとしてマウントしたものですが、 内容が全く同じになっています
tacsheaven

2018/09/14 04:44

引数なしの subst を使えば「仮想ドライブの一覧」が取れますから、それで判定すればよいのでは?
kamikazelight

2018/09/14 04:46

ありがとうございます!!! 確認出来ました。
guest

0

"ネットーワークドライブの割当解除" or "仮想ドライブをアンマウント" をする

解除、アンマウントするなら、してしまって、エラーメッセージを見るとか。

投稿2018/09/14 03:38

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamikazelight

2018/09/14 04:55

貴方の言葉で 根底に戻って仮想ドライブかどうか本当に判断する必要性があるのか考え直すことが出来ました。 考え直した結果、必要ない気がしてきたので ベストアンサーにしようか 迷ったのですが、質問にぴったりの回答が来たのでそちらをベストアンサーとさせていただきました。 また次もお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問