1

我在脚本中有以下代码。问题是我想获取以特定名称开头并处于特定启动模式的脚本的信息。

var e = new Enumerator(GetObject("winmgmts:").InstancesOf("Win32_Service"))
var WSHShell = new ActiveXObject ("WScript.Shell");

var strPrefix = "TTTT";

for(;!e.atEnd(); e.moveNext()){
 var Service = e.item();
 var strName = Service.Name;

 if (strName.substr (0, strPrefix.length) == strPrefix) { 
  if(Service.StartMode == 'mmManual') {
   WScript.Echo("Yes");
  }
  if(e.StartMode == 'Manual') {
   WScript.Echo("Yes");
  }
 } 
}

在上面的脚本中,我试图知道启动模式,但它总是返回 true。

4

2 回答 2

2

McDowell 是对的,但请注意,如果您将它们作为 WMI 查询的一部分,您可以在循环中去掉前缀和启动模式检查:

SELECT * FROM Win32_Service WHERE Name LIKE 'TTTT%' AND St​​artMode = 'Manual'

使用此查询,您的脚本可能如下所示:

var strComputer = ".";
var oWMI = GetObject("winmgmts://" + strComputer + "/root/CIMV2");

var colServices = oWMI.ExecQuery("SELECT * FROM Win32_Service WHERE Name LIKE 'TTTT%' AND StartMode = 'Manual'");
var enumServices = new Enumerator(colServices);

for(; !enumServices.atEnd(); enumServices.moveNext())
{
  var oService = enumServices.item();
  WScript.Echo(oService.Name);
}
于 2010-01-31T16:03:46.513 回答
1

我不确定你到底在问什么,但这...

if(Service.StartMode = 'mmManual')

...将始终评估为true. 你缺少一个=. 它应该是:

if(Service.StartMode == 'mmManual')
于 2010-01-31T15:45:00.800 回答