Vyvolání metod objektů úložiště pomocí CIM a rozhraní WMI
Chcete-li použít metodu u objektu, vyvoláte ji. Můžete toho dosáhnout pomocí přímého vyvolání, které zahrnuje odkaz na objekt, který podporuje metodu následovaný názvem metody. Alternativně můžete použít rutiny Invoke-WmiMethod nebo Invoke-CimMethod . Pokud používáte rutiny, musí rutina, kterou používáte, odpovídat typu objektu, se kterým pracujete.
Přímé vyvolání
Přímé vyvolání se obvykle používá při načítání objektů WMI (Windows Management Instrumentation) do proměnné. Pak můžete vyvolat metody dostupné pro tento typ objektu zadáním názvu proměnné, tečky (.) a pak metody. Podobá se zobrazení hodnot vlastností objektu obsaženého v proměnné. Následující příklad dotazuje službu zařazování jako objekt WMI a pak vyvolá StopService metoda.
$WmiSpoolerService = Get-WmiObject -Class Win32_Service -Filter "Name='Spooler'"
$WmiSpoolerService.StopService()
Metoda StopService v předchozím příkladu nevyžaduje předání žádných parametrů, takže v závorkách není žádná hodnota. Pokud vyvoláte metodu, která vyžaduje parametry, jejich hodnoty se umístí do závorek. Následující příklad nastaví hodnotu parametru start mode na Manual:
$WmiSpoolerService.ChangeStartMode("Manual")
Pokud chcete identifikovat parametry požadované pro metodu, měli byste si projít dokumentaci pro její třídu. Mějte na paměti, že parametry pro parametry metody WMI musí být předány v určitém pořadí. K identifikaci pořadí můžete použít Metodu GetMethodParameters(). Následující příklad dotazuje parametry pro metodu Change :
$WmiSpoolerService.GetMethodParameters("Change")
Pokud metoda vyžaduje více parametrů a některé z nich nechcete změnit, můžete předat $null hodnotu parametrů, které nechcete změnit. Kromě toho nemusíte zadávat parametry, které jsou umístěny za parametrem, který chcete změnit. V následujícím příkladu má metoda Change 11 parametrů, ale konfiguruje se pouze druhý parametr (zobrazovaný název).
$WimSpoolerService.Change($null,"Printer Service")
Poznámka:
Vzhledem k tomu $null , že se při volání metody považuje za hodnotu parametru, kterou chcete přeskočit, nelze nastavit hodnotu $null vyvoláním metody u objektu WMI.
Poznámka:
Objekty načtené metodou Get-CimInstance jsou statické a nemají metody. Proto je nemůžete použít tím, že se spoléháte na přímé vyvolání.
Použití rutiny Invoke-WmiMethod
Rutina Invoke-WmiMethod je dalším způsobem, jak vyvolat metodu pro objekt WMI s jinou syntaxí. Parametr -Name se používá k určení metody, která se má vyvolat, a parametr -Argument se používá k určení hodnot parametrů, které jsou předány metodě. V případě potřeby se jako seznam nebo pole oddělených čárkami předá více parametrů. Hodnoty parametrů musí být v určitém pořadí stejně jako pro přímé vyvolání.
Můžete použít samotnou rutinu Invoke-WmiMethod nebo můžete použít kanál k odeslání objektu WMI. Tady jsou dva příklady, které fungují stejným způsobem:
Get-WmiObject -Class Win32_OperatingSystem | Invoke-WmiMethod -Name Win32Shutdown -Argument 0
Invoke-WmiMethod -Class Win32_OperatingSystem -Name Win32Shutdown -Argument 0
Rutiny Get-WmiObject a Invoke-Method mají parametr -ComputerName , který umožňuje spustit rutinu na vzdáleném počítači.
Použití rutiny Invoke-CimMethod
Rutiny Invoke-CimMethod poskytují podobné funkce jako rutina Invoke-WmiMethod , ale seznam argumentů pro Invoke-CimMethod je objekt slovníku. Takový objekt se skládá z jednoho nebo více párů klíč-hodnota. Klíč pro každou dvojici je název parametru a hodnota pro každou dvojici je odpovídající hodnota parametru. V následujícím příkladu je path název parametru a Notepad.exe je hodnota:
Invoke-CimMethod -ComputerName LON-DC1 -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine='Notepad.exe'}
Pokud chcete do slovníku zahrnout více parametrů, oddělte jednotlivé páry klíč-hodnota středníkem. Vzhledem k tomu, že jsou parametry pojmenované, mohou být páry klíč-hodnota v libovolném pořadí.
Chcete-li vyvolat metodu pro konkrétní instanci objektu, načtěte nejprve objekt pomocí rutiny Get-CimInstance . Objekt můžete předvést přímo do rutiny Invoke-CimMethod nebo ho nejprve uložit do proměnné. Pokud objekt poskytuje všechny potřebné informace, nemusíte zadávat žádné argumenty. Následující příklad načte všechny spuštěné instance Notepad.exe a ukončí je:
Get-CimInstance -ClassName Win32_Process -Filter "Name='notepad.exe'" | Invoke-CimMethod -MethodName Terminate
Pokud použijete parametry -ComputerName nebo -CIMSession s rutinou Get-CimInstance a předáte výsledný objekt do rutiny Invoke-CimMethod , metoda se vyvolá na jakémkoli počítači nebo relaci objektu, ze které objekt pochází. Pokud chcete například ukončit proces na vzdáleném počítači, můžete spustit následující příkaz:
Get-CimInstance -ClassName Win32_Process -Filter "Name='notepad.exe'" -Computername LON-DC1 | Invoke-CimMethod -MethodName Terminate