gpt4 book ai didi

远程计算机上的 Delphi Wmi 查询

转载 作者:行者123 更新时间:2023-12-02 05:11:14 28 4
gpt4 key购买 nike

我们使用WmiSet在远程计算机上执行 Wmi 查询。它在 Delphi 2007 中运行良好,但目前不适用于 Delphi XE。

我从之前的SO问题Use Wmi with Delphi中找到了一些代码来执行Wmi查询答案 5 中提供的代码片段在我的本地计算机上运行得非常好,但我需要知道是否可以在远程计算机上执行 Wmi 查询。

即使我使用管理员凭据连接到远程计算机,我也会收到 EOleSysError:访问被拒绝 异常。

问候,彼得。

最佳答案

彼得.在使用 WMI 连接到远程计算机之前,您必须启用对远程计算机中指定用户的 DCOM 访问。

阅读这些文章,了解并解决使用 WMI 连接到远程计算机的问题。

此外,我在这里留下了更清晰的代码来连接到远程计算机中的 wmi。检查EOleException异常处理部分,获取错误码,找到问题原因。

program WMIRemote;

{$APPTYPE CONSOLE}

uses
SysUtils,
ActiveX,
ComObj,
Variants;

procedure GetWMIOSInfo(const RemoteMachine,User,Password : string);
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(RemoteMachine, 'root\CIMV2', User, Password);
FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL',0);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
while oEnum.Next(1, FWbemObject, iValue) = 0 do
begin
Writeln(FWbemObject.Name);
//code
FWbemObject:=Unassigned;
end;
FWbemObjectSet:=Unassigned;
end;

begin
try
CoInitialize(nil);
try
//GetWMIOSInfo('localhost','','');
GetWMIOSInfo('192.168.52.2','Administrator','password');
finally
CoUninitialize;
end;
except
on E:EOleException do
Writeln(Format('Error Code %d ($%x) Msg : %s',[E.ErrorCode,E.ErrorCode, E.Message]));

on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Readln;
end.

关于远程计算机上的 Delphi Wmi 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4990890/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com