2014-02-03 3 views
1

Я пытаюсь выполнить запрос SMS WMI (теперь 2012, ранее 2007 с VBS), и иногда это занимает до 20 минут (за границей) и 5-10 минут (система вниз) при использовании команды Get-WMIObject. Я знаю, как сделать быстрый вызов в VBS:Более быстрый способ получить удаленный запрос WMI WMS в PowerShell

 lLocator = CreateObject("WbemScripting.SWbemLocator") 

     gService = lLocator.ConnectServer(Form1.strSQLServer, "root/sms/site_" & Form1.strSiteCode) 

     'Query for Distribution Points and populate drop down list 
     colItems = gService.ExecQuery("select PackageID, SourceNALPath from SMS_PackageStatusDistPointsSummarizer where PackageID='" & listBootImage.SelectedItem.ID & "'") 
     For Each objItems In colItems 
      ListDistPoint.Items.Add(UCase(Mid(objItems.SourceNALPath, InStr(objItems.SourceNALPath, "\")))) 
      If InStr(objItems.SourceNALPath, Mid(Form1.strSQLServer, 1, (InStr(Form1.strSQLServer, ".") - 1))) Then 
       ListDistPoint.SelectedIndex = ListDistPoint.Items.Count - 1 
      End If 
     Next 

И в PS это вызов Делаю:

invoke-command {Get-WmiObject -namespace root\sms\site_<sitecode> -class SMS_PackageStatusDistPointsSummarizer -computername '<compname>' -property "PackageID","SourceNALPath" | where {$_.PackageID -eq '<pkgname>'} |Select PackageID, SourceNALPath} 

или это:

Get-WmiObject -namespace root\sms\site_<sitecode> -class SMS_PackageStatusDistPointsSummarizer -computername '<compname>' -property "PackageID","SourceNALPath" | where {$_.PackageID -eq '<pkgname>'} |Select PackageID, SourceNALPath 

и оба те же скорость. Есть ли лучший, идеальный способ сделать то же самое, что и в сценарии VB (удаленное подключение, получение информации, а затем вернуться)? Сценарий VB заметно быстрее. Аппаратное обеспечение сервера SCCM 2012 лучше, поэтому я не считаю, что скорость связана с производительностью сервера. Также обе базы данных содержат одни и те же сайты, системы и т. Д.

Благодарим за помощь.

ответ

1

Попробуйте это:

Get-WmiObject -namespace root\sms\site_$sitecode ` 
       -computername "$compname" ` 
       -query "select PackageID, SourceNALPath from SMS_PackageStatusDistPointsSummarizer where PackageID='$pkgname'" 

с другими Powershell заявления, вы запрашивая все, а затем фильтрации локально. С запросом WMI, который вы используете в VBS, запрос выполняется на сервере . Есть меньше данных для обработки, и это делается более эффективно.