代码之家  ›  专栏  ›  技术社区  ›  Harun24hr

从网络主机(LAN连接的PC)获取操作系统信息

  •  3
  • Harun24hr  · 技术社区  · 6 年前

    我正在尝试从连接到本地网络的主机获取信息。下面的代码给出了操作系统的名称 Microsoft Windows 10专业版 在我的本地电脑。当我使用一个网络电脑名,然后提示错误 Access Denied

    enter image description here

    我的理解是,由于没有提供凭证,因此无法获得从该PC收集信息的许可。所以,我的问题是如何为这些代码提供凭证,以便它能够获得收集权限。

    Windows Management Instrumentation (WMI)

    Sub GetOS()
        If getOperatingSystem <> "" Then
            MsgBox getOperatingSystem()
        End If
    End Sub
    
    '------------- Function to get Operating System Info --------------
    
    Public Function getOperatingSystem()
        Dim localHost       As String
        Dim objWMIService   As Variant
        Dim colOperatingSystems As Variant
        Dim objOperatingSystem As Variant
    
        On Error GoTo Error_Handler
    
        'localHost = "." 'Technically could be run against remote computers, if allowed
        localHost = "SCANNER-PC"
        Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & localHost & "\root\cimv2")
        Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
        For Each objOperatingSystem In colOperatingSystems
            getOperatingSystem = objOperatingSystem.Caption '& " " & objOperatingSystem.Version
            Exit Function
        Next
    
    Error_Handler_Exit:
        On Error Resume Next
        Exit Function
    
    Error_Handler:
        MsgBox "Error No: " & Err.Number & vbCrLf & "Description: " & Err.Description
        Resume Error_Handler_Exit
    End Function
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Harun24hr    6 年前

    最后,我可以将凭据传递给WMI查询。下面的子查询使用凭据的远程PC上的信息。

    Public Sub WMIQueryCRED()
    Dim objSWbemLocator As Object
    Dim objWMIService As Object
    Dim colItems As Object
    Dim strHost, strUserID, strPassword As String
    
    strHost = "NetworkHost"
    strUserID = "Domain\domainadmin"
    strPassword = "Password"
    
        Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
        Set objWMIService = objSWbemLocator.ConnectServer(strHost, "root\cimv2", strUserID, strPassword)
        Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
    
        For Each objItem In colItems
            MsgBox objItem.Caption, vbInformation, "Successfull"
        Next
    
    End Sub