我用wmi获取远程电脑的信息,
如果使用administrator ,下面两个查询都可以返回数据
SELECT * FROM Win32_DiskDrive
SELECT * FROM Win32_NTLogEvent
如果使用非administrator账号 ,第一个可以返回数据。第二个返回0条数据,
我估计是远程电脑设置的问题,但是不知道具体怎么做,请求帮忙,谢谢
透過WMI 取得不同的系統資訊需要不同的系統權限
使用Admin 帳號是最快的做法
如果有安全上的考量,可以為該功能建一個專用的帳號,僅開需要的權限
我用其他的账号是管理员的权限,也无法获取,求指教谢谢。
@simadi:
帳號還有細部選項的設定喔,確定都跟Admin 一模一樣嗎?
@RosonJ: 不确定,不知道在哪儿设置,请指教,多谢了
@simadi:
哪個版本的OS?看能不能找個圖給你參考
@RosonJ: win10,win server 16,多谢
@simadi:
確認一下你用來執行的帳號使否加入這個使用者群組中
@simadi:
這兩個我都沒有喔
能否確認一下你是如何指定用特定帳號執行呢?
public WMIService(string ip = ".", string userName = "", string password = "")
{
Ip = ip;
UserName = userName;
Password = password;
ConnectionOptions Conn = new ConnectionOptions();
if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password) || "127.0.0.1" == ip || "." == ip)
{
LocalConnection = true;
}
else
{
Conn.Username = userName;
Conn.Password = password;
Conn.Impersonation = ImpersonationLevel.Impersonate;
Conn.Authentication = AuthenticationLevel.PacketPrivacy;
Conn.EnablePrivileges = true;
}
Ms = new ManagementScope(path: string.Format("\\\\{0}\\root\\cimv2", ip), options: Conn);
}
public ManagementObjectCollection getQueryResult(string sql)
{
ManagementObjectCollection moc = null;
try
{
ManagementObjectSearcher mos = new ManagementObjectSearcher(Ms, new ObjectQuery(sql));
moc = mos.Get();
}
catch (Exception ex)
{
Logger.LogError($"{Ms.Path}\r\n{sql}",ex);
}
return moc;
}
var sql = $"SELECT ComputerName,Type,TimeGenerated,SourceName,EventCode,LogFile,CategoryString,RecordNumber FROM Win32_NTLogEvent";
var moc = getQueryResult(sql);
得到结果 moc 数量是0,正常的话应该>0,使用这个语句 SELECT * FROM Win32_DiskDrive 是可以得到数据的
@simadi:
看起來沒什麼問題
Conn.Authentication = AuthenticationLevel.PacketPrivacy;
這個是否試過使用Default ?
@RosonJ: 试了,也不行,我私信你吧
可以尝试给账号提权。
我用其他的账号是管理员的权限,也无法获取,求指教谢谢。