サーバの空き容量を確認したいです

タグの編集
投稿者 ミニオン  (学生) 投稿日時 2018/7/26 06:14:25
VB2015、Win10で、開発作業してます。
System.IO.DriveInfoなら自分のPCなら取得できるようですが、ファイルサーバ(仮にServer1とします)の空き容量をVBで取得する方法が分からず悩んでいます。
ご回答宜しくお願いします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/7/26 11:11:19
こんな感じでどうでしょう。
参照設定に「System.Management」を加えておいてください。

Option Strict On
Imports System
Imports System.Text
Imports System.Management
Module Module1
    Sub Main()
        Dim serverName As String = InputBox("サーバー名を指定""空き容量確認""localhost")
        Dim options As ConnectionOptions = Nothing
        If New String() {"localhost""."""}.Contains(serverName.ToLowerInvariant()) Then
            options = Nothing
        Else
            'My.User.InitializeWithWindowsUser() 
            'Dim userName As String = My.User.Name 
            Dim userName As String = InputBox("ユーザー名""空き容量確認""Administrator")
            Dim password As String = InputBox("パスワード""空き容量確認")
            options = New ConnectionOptions() With {.Username = userName, .Password = password}
        End If

        Dim path As String = "\\" & serverName & "\root\cimv2"
        Dim scope As New ManagementScope(path, options)
        Dim query As New ObjectQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3 OR DriveType = 4")

        Dim sb As New StringBuilder()
        sb.AppendLine("ドライブ|総容量|空き容量")
        Using mos As New ManagementObjectSearcher(scope, query), col = mos.Get()
            For Each mo In col
                sb.AppendLine(String.Format("{0}|{1:N0} Bytes|{2:N0} Bytes", mo("DeviceID"), mo("Size"), mo("FreeSpace")))
                mo.Dispose()
            Next
        End Using
        MsgBox(sb.ToString(), MsgBoxStyle.Information, "空き容量確認")
    End Sub
End Module
投稿者 ミニオン  (学生) 投稿日時 2018/7/29 15:49:00
>魔界の仮面弁士さん

ご回答ありがとうございました。
早速コードを試してみましたが、
「Using mos As New ManagementObjectSearcher(scope, query), col = mos.Get() 」
のところで
「UnAuthorizedAccessExceptionが発生しました。」とエラーになりました。

ただ、入力したUserIDとPasswordで、通常のWindowsでのフォルダ参照は可能なので
エラーの原因が特定できませんでした。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/7/29 23:48:28
相手先コンピューターのローカルアカウントではなく、
Active Directory ドメインのアカウントを指定してみてください。

ワークグループ運用の場合は、相手側サーバー側の DCOM 設定で
リモートアクセスが許容されているかを確認してください。
https://www.manageengine.jp/support/kb/OpManager/?p=4990
投稿者 ミニオン  (学生) 投稿日時 2018/8/4 01:48:09
魔界の仮面弁士さん
>Active Directory ドメインのアカウントを指定してみてください。
環境につきましては、自分のPCではないので、良く分かりません。
共有フォルダにドライブを割り当ててもらうようにして、一応解決しました。
色々と教えて下さり、ありがとうございました。