我想使用WMI计算机器上可用的总磁盘空间和可用磁盘空间.并查询是=>从Win32_LogicalDisk中选择Size,FreeSpace.
此查询返回多行,因为机器具有多个驱动器.如果我总结这些列,那么我将得到预期的结果.我可以通过查询轻松地在sql中实现这一点
SELECT sum(Size),sum(FreeSpace)FROM Win32_LogicalDisk
但它给了wql错误.
如何在wql中实现相同的功能?
我碰巧在这里看到了以下部分代码.
$Obj.ExecNotificationQueryAsync($hObj, "SELECT * FROM __InstanceCreationEvent WITHIN 0.5 WHERE TargetInstance ISA 'Win32_Process'")
$Obj.ExecNotificationQueryAsync($hObj, "SELECT * FROM __InstanceDeletionEvent WITHIN 0.5 WHERE TargetInstance ISA 'Win32_Process'")
Switch $OB.Path_.Class
Case "__InstanceCreationEvent"
ConsoleWrite("+~>" & _ProcessGetPath($OB.TargetInstance.ProcessID) & @CR)
Case "__InstanceDeletionEvent"
ConsoleWrite("!~>" & $OB.TargetInstance.ProcessID & @CR)
EndSwitch
Run Code Online (Sandbox Code Playgroud)
我使用相同的WQL查询来监视进程C++.是否存在类似的东西C++,我可以知道它是创建还是终止进程.我尝试使用__CLASS,但它输出为Win32_Process.我在编码MSVS2010.
请帮忙.Thankyou
编辑1:添加了WQL查询
hres = pSvc->ExecNotificationQueryAsync(
_bstr_t("WQL"),
_bstr_t("SELECT * "
"FROM __InstanceDeletionEvent WITHIN 1 "
"WHERE TargetInstance ISA 'Win32_Process' "),
WBEM_FLAG_SEND_STATUS,
NULL,
pStubSink);
hres = pSvc->ExecNotificationQueryAsync( …Run Code Online (Sandbox Code Playgroud) 我已经看了很多关于这个问题的不同看法,答案在某种程度上取决于问题是如何表达的.您可以使用拆分或使用正则表达式来执行此操作.
我正在做的是使用WMI返回主板的BIOSVersion.无论出于何种原因,制造商都会提供更多内容,而不仅仅是版本号.在整个字符串中,版本号位于句点分隔字符串的第三个位置.在第二个位置的值是ALWAYS 86A.在此示例中,实际上是版本0460.SIX7910J.86A.0460.2012.0327.1627.
那么,对于我在做什么,这将是"最佳实践"?查询表达式中的正则表达式,循环使用split或其他我尚未找到的结果?
作为参考,这是我正在使用的C#WMI代码.示例代码使用Windows窗体,因为这是WMI代码创建者输出的内容.我将在WPF项目中使用它,但我不知道这对于问题的本质意味着太多.我想我可以找出所需的代码,但我想要了解哪种方式是最好的方法.
感谢您的任何帮助,您可以提供.如果代码没有全部出现在代码块中,我会提前道歉.我以为我遵循了如何做的说明,但在代码块的示例显示中,它在代码块中有一点代码,然后转到普通文本然后返回到代码块.希望实际渲染更清晰.
using System;
using System.Management;
using System.Windows.Forms;
namespace WMISample
{
public class MyWMIQuery
{
public static void Main()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT BIOSVersion FROM Win32_BIOS");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_BIOS instance");
Console.WriteLine("-----------------------------------");
if(queryObj["BIOSVersion"] == null)
Console.WriteLine("BIOSVersion: {0}", queryObj["BIOSVersion"]);
else
{
String[] arrBIOSVersion = (String[])(queryObj["BIOSVersion"]);
foreach (String arrValue in arrBIOSVersion)
{
Console.WriteLine("BIOSVersion: {0}", arrValue);
}
}
}
}
catch (ManagementException e)
{
MessageBox.Show("An error occurred while …Run Code Online (Sandbox Code Playgroud) 这似乎是一件非常容易的事; 但是,我对WMI一无所知.我如何确定是否通过我的一台服务器上的网络共享目录(使用PowerShell)?另外,是否有一个快速入门,我可以阅读,以获得WMI?我真的希望能够在编写脚本时使用它,但是大多数资源都没有显示PowerShell的任何示例.
目前,我正在检查"服务器"服务是否正在运行; 并检查特定组是否具有该目录的权限.
$serversrvc = Get-Service -Name "Server"
$dirpath = "C:\My\Path\"
$pathacl = (Get-Acl -path $dirpath).Access
$group = "Domain\User"
# Test if the "Server" service is running
If ($serversrvc.Status -eq "Running")
{
echo '"Server" service is running.'
}
Else
{
echo '"Server" is NOT running.'
}
# Test if the $dirpath exists
If (Test-Path $dirpath)
{
echo "$dirpath exists."
}
Else
{
echo "$dirpath does not exist."
}
# Test if $group has permssions on $dirpath
foreach ($id in …Run Code Online (Sandbox Code Playgroud) 类似于这个问题, 除了没有给出关于从参考中获取对象的主要问题的答案.
例如:
PS C:\Users\admin> Get-WmiObject -Namespace $namespace -Class $class
...
IsActive : 1
oA: \\.\ROOT\abc\abc\ABC:abc.xyz="tst2"
oB : \\.\ROOT\abc\abc\ABC:abc.xyz="tst3"
PSComputerName : admin-test2
Run Code Online (Sandbox Code Playgroud)
oA并且oB是引用,因此在powershell中作为字符串出现.有没有办法在powershell中使用WMI查询获取它们所代表的对象?