Более быстрый способ получить удаленный SMS-запрос WMI в PowerShell

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

        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 лучше, поэтому я не думаю, что скорость связана с производительностью сервера. Также обе базы данных содержат одни и те же сайты, системы и т.д.

Спасибо за помощь.


person montag    schedule 03.02.2014    source источник


Ответы (1)


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

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

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

person Alyssa Haroldsen    schedule 02.06.2014