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

时间:2018-10-04 09:27:37

标签: excel vba excel-vba networking operating-system

我正在尝试从连接到本地网络的主机获取信息。以下代码在我的本地计算机中给出了操作系统名称,例如 Microsoft Windows 10 Pro 。当我使用网络PC名称时,提示错误Access Denied

enter image description here

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

  

注意:我已向远程PC上的Windows防火墙添加了例外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 个答案:

答案 0 :(得分:0)

最后,我能够将凭据传递给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
相关问题