C#中PowerShell Runspace调用Get-WmiObject无输出问题及解决
问题与解决方案
问题描述
在Windows Form的C#代码中,尝试通过PowerShell Runspace执行Get-WmiObject -Class Win32_Volume命令获取卷信息,但Runspace返回空结果。该命令直接在PowerShell中执行可正常输出,且Runspace执行ipconfig时工作正常,说明Runspace本身无问题。
尝试过的无效方法
- 使用
AddScript添加Get-WmiObject -Class Win32_Volume | select Name, SerialNumber脚本,结果为空; - 使用
AddCommand("get-wmiobject").AddParameter("Class", "Win32_Volume"),报错:The term 'get-wmiobject' is not recognized as a name of a cmdlet, function, script file, or executable program.; - 通过
ManagementObjectSearcher查询Win32_DiskDrive获取序列号,无输出;
解决方案
将ManagementObjectSearcher的查询类改为Win32_Volume,并添加过滤条件,只显示带盘符且非启动卷的驱动器信息,代码如下:
ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_Volume"); ManagementObjectCollection colDisks = mgmtObjSearcher.Get(); foreach (ManagementObject objDisk in colDisks) { if (objDisk["Name"].ToString().ToLower().Contains("volume") == false && objDisk["BootVolume"].ToString().ToLower() == "false") { MessageBox.Show("Name: " + objDisk["Name"].ToString() + "\nSerial: " + objDisk["SerialNumber"].ToString()); } }
内容的提问来源于stack exchange,提问作者L3s
相关产品推荐
相关产品推荐

