我正在尝试从连接到本地网络的主机获取信息。以下代码在我的本地计算机中给出了操作系统名称,例如 Microsoft Windows 10 Pro 。当我使用网络PC名称时,提示错误Access Denied
我的理解是,由于没有提供凭据,因此未获得从该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
答案 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