Запрос фильтра событий WMI в скрипте PowerShell - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь добавить два разных события WMI на сервер SCCM с помощью скрипта PowerShell, который кто-то написал.Я должен сделать два запроса событий в один запрос, и я не уверен, как лучше это сделать.Я пробовал кучу разных способов до сих пор.Вот код:

Function WMI-InstanceFilter
{
# Function Started
LogTraceMessage "*** Function WMI-InstanceFilter Started ***"
Write-Verbose "*** Function WMI-InstanceFilter Started ***"

$PropertyHash = @{
    QueryLanguage = "WQL";
    Query = "";
    Name = "Name";
    EventNameSpace="root/sms/site_$($SiteCode)"
    }

$Script:InstanceFilter = New-CimInstance -Namespace root/subscription -ClassName __EventFilter -Property $PropertyHash -Verbose -ErrorAction Stop

Вот два запроса о событиях, которые мне нужно как-то объединить и поместить в строку запроса:

SELECT * FROM __InstanceOperationEvent Within 900 Where TargetInstance ISA 'SMS_Package' and TargetInstance.Name like 'drivers - %'"

SELECT * FROM __InstanceOperationEvent Within 300 Where TargetInstance ISA 'SMS_Package' and TargetInstance.Name like 'BIOS - %'"

Как лучше всего это сделать?

1 Ответ

0 голосов
/ 26 августа 2018

Вы имеете дело с WQL в своих запросах, и у вас может быть только одно значение WITHIN - см. https://docs.microsoft.com/en-gb/windows/desktop/WmiSdk/within-clause, поэтому вам придется либо выбрать 300 (секунд = 5 минут), либо 900 (секунд = 15) минут) или компромиссное значение где-то между ними.

Ваш комбинированный оператор SELECT будет выглядеть так

SELECT * FROM __InstanceOperationEvent WITHIN 900 WHERE TargetInstance ISA 'SMS_Package' AND TargetInstance.Name LIKE 'drivers - %' OR TargetInstance.Name LIKE 'BIOS - %'

Измените значение WITHIN на то, что вы считаете наиболее подходящим для ваших нужд.

Вам нужны оба диска и биос одновременно или вы можете использовать оператор переключателя, управляемого параметром, для переключения между ними?

как то так

Function WMI-InstanceFilter {
[CmdletBinding()]
param (
  [ValidateSet('Bios', 'Drivers' )]
  [string]$InstanceType
)

# Function Started
LogTraceMessage "*** Function WMI-InstanceFilter Started ***"
Write-Verbose "*** Function WMI-InstanceFilter Started ***"

switch ($InstanceType) {
 'Bios' {
          $query = "SELECT * FROM __InstanceOperationEvent Within 900 Where TargetInstance ISA 'SMS_Package' and TargetInstance.Name like 'drivers - %'"
        }
  'Drivers' {
          $query = "SELECT * FROM __InstanceOperationEvent Within 300 Where TargetInstance ISA 'SMS_Package' and TargetInstance.Name like 'BIOS - %'"
        }
}

$PropertyHash = @{
    QueryLanguage = "WQL"
    Query = $query
    Name = "Name"
    EventNameSpace="root/sms/site_$($SiteCode)"
    }

$Script:InstanceFilter = New-CimInstance -Namespace root/subscription -ClassName __EventFilter -Property $PropertyHash -Verbose -ErrorAction Stop
}
...