我们使用WmiSet在远程计算机上执行Wmi查询.它在Delphi 2007中运行良好,但目前不适用于Delphi XE.
我发现了一些代码可以Wmi Queries从以前的SO问题使用Wmi和Delphi.提供的代码片段Answer No. 5在我的本地计算机上运行良好,但我需要知道是否可以在远程计算机上执行Wmi Query.
即使我使用管理员凭据连接到远程计算机,也会出现EOleSysError: Access is denied异常.
问候,彼得.
在尝试在网络上查找一组计算机时,我发现了ManagementObjectSearcher类以及ManagementObject类.ManagementObjectSearcher的构造函数将sql/sql-esque查询作为参数.目前,我正在使用我在遗留代码中找到的查询:
ManagementObjectSearcher adapters = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter");
Run Code Online (Sandbox Code Playgroud)
但我正在试图弄清楚如何知道查询中可能存在的内容.什么是表/对象?所有可能的限制是什么?这个课程和相关问题的一般主题是什么,所以我可以查看并了解更多信息?
我正在尝试使用WMIC删除旧打印服务器上的旧打印机
如果我从命令行使用以下语法,它的工作原理
WMIC PRINTER WHERE"SERVERNAME LIKE'%% OLDSERVERNAME %%'"DELETE
我被问到是否可以让它更换打印机或更新它们以免帮助台获得"如何添加我的打印机"电话
我尝试使用SET的一些变体来设置SERVERNAME的属性,它似乎处理,但没有任何变化,并且执行GET仍然显示旧值.
所以我想我可以做一个FOR/F循环,在变量中包装打印机的名称(sharename),然后在删除违规打印机后使用另一个命令重新创建打印机.
这是我的剧本
@ECHO
ECHO Gathering Installed Printer Information...
FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO SET PRINTERNAME=%%A
ECHO %PRINTERNAME%
Run Code Online (Sandbox Code Playgroud)
所以你会认为你得到的所有值都包含在一个很好的变量中,你可以根据自己的意愿去做,但是没有,我开启了回声,看起来这个变量一旦被捕获就会被设置回null
我的输出看起来像这样......
FOR /F "tokens=1 skip=1" %%A IN ('WMIC PRINTER WHERE "Servername like "%%printaz1%%"" get sharename') DO SET PRINTERNAME=%%A
SET PRINTERNAME=nameofprinter
SET PRINTERNAME=
ECHO
ECHO is on.
Run Code Online (Sandbox Code Playgroud)
我会喜欢一些关于为什么它似乎倾销字符串的想法.
Powershell和VBScript也不是不可选择的,我对两者都很熟悉,这似乎有可能,而且我真的不想重新开始.
我需要编写一个WMI查询,我需要检查一些值是否等于列表中的一个值,但我没有发现WQL支持像SQL这样的IN运算符.
例如:SELECT*FROM Device WHERE __CLASS IN("Device1","Device20").
如何编写此查询的方法是什么?
谢谢.
我试图在最近5个小时左右的时间内对另一台计算机运行WMI查询以查找错误.在运行WMI查询时,您是否至少应该使用where子句过滤初始查询?
我的代码基于从MSDN上的WMI代码创建者生成的样本
这是我正在使用的选择查询
private ManagementScope CreateNewManagementScope(string server)
{
string serverString = @"\\" + server + @"\root\cimv2";
ManagementScope scope = new ManagementScope(serverString);
return scope;
}
ManagementScope scope = CreateNewManagementScope(servername);
scope.Connect();
SelectQuery query = new SelectQuery("select * from Win32_NtLogEvent where TimeWritten > '" + DateTime.Now.AddHours(-5).ToString() + "'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection logs = searcher.Get();
int iErrCount = logs.Count;
Run Code Online (Sandbox Code Playgroud)
我只是想了解最近5个小时内的错误.在计算时它会抛出一个错误.错误是相当模糊的"通用失败".
[更新 - 现在使用这样的日期]
DateTime d = DateTime.UtcNow.AddHours(-12);
string dateFilter = ManagementDateTimeConverter.ToDmtfDateTime(d);
SelectQuery query = new SelectQuery("select * from Win32_NtLogEvent where …Run Code Online (Sandbox Code Playgroud) 是否可以打印系统中每个核心的当前CPU使用率?
这是我到目前为止使用 powershell 所做的:
Get-WmiObject -Query "select Name, PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor"
Run Code Online (Sandbox Code Playgroud) 如何使用 WMI 查询语言在目录中查找文件?
这是我到目前为止:
select * from Cim_DataFile
where path = "\\\\C:\\Users\\name\\"
Run Code Online (Sandbox Code Playgroud)
查询不返回任何结果。
任何帮助深表感谢。
我有一个正在尝试运行的批处理文件,但我不断收到错误。我认为这个问题类似于I can't get the right syntax to use WMIC in batch file,但 dbenham 的答案在我的情况下并不完全有效,因为我正在通过管道传输到 findstr。这是批处理文件的一部分(它所在的部分):
for /F %%I in ('wmic nic where 'Manufacturer!="Microsoft" and Macaddress IS NOT NULL' get index ^| findstr /r [0-9]') do ( echo %%I )
如果您从 cmd 运行 wmic 命令或它自己的批处理文件行,则 wmic 命令工作得很好,但我无法让它在 for 循环中运行。有人可以帮我从这里出去吗?
谢谢,约翰
我有一个方法可以返回远程机器上的服务列表。我正在使用 ManagementObjectSearcher.Get() 和 WIN32 查询获取 ManagementObjectCollection。然后在 foreach 循环中,我创建了 Service 类的实例并将其添加到结果列表中。在初始化新服务时,我使用 GetPropertyValue(string) 获取 ManagementObject 属性。我面临的问题是这个过程非常缓慢。我认为 GetPropertyValue 很慢(我每个循环使用它 7 次)。有没有更快的方法从 ManagementObject 类中获取属性?
var query = new ObjectQuery("Select Name, DisplayName, ProcessId, Description, State, StartMode, StartName From Win32_Service");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
ManagementObjectCollection allServices = searcher.Get();
foreach (ManagementObject p in allServices)
{Service newService = new Service{ Name = p.GetPropertyValue("Name"),etc...} result.Add(newService);}
Run Code Online (Sandbox Code Playgroud) 似乎执行此操作的类是MSFT_NetTransportConnection。
但是我不能通过 Get-WmiObject 查询这个类:
C:\Users\Justin Dearing> Get-WmiObject MSFT_NetTransportConnection
Get-WmiObject : Invalid class "MSFT_NetTransportConnection"
At line:1 char:1
+ Get-WmiObject MSFT_NetTransportConnection
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidType: (:) [Get-WmiObject], ManagementException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
C:\Users\Justin Dearing> Get-WmiObject MSFT_NetTransportConnection -Namespace "root/StandardCimv2"
Get-WmiObject : Not supported
At line:1 char:1
+ Get-WmiObject MSFT_NetTransportConnection -Namespace "root/StandardC ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], ManagementException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
C:\Users\Justin Dearing> Get-WmiObject MSFT_NetTransportConnection -Namespace "fff"
Get-WmiObject : Invalid namespace "fff"
At line:1 char:1 …Run Code Online (Sandbox Code Playgroud)