Assicurati di leggere gli articoli precedenti della serie:
- Scopri come automatizzare Windows con PowerShell
- Imparare a utilizzare i cmdlet in PowerShell
- Apprendimento Come utilizzare gli oggetti in PowerShell
- Apprendimento della formattazione, del filtro e del confronto in PowerShell
- Impara a utilizzare i servizi remoti in PowerShell
- Utilizzo di PowerShell per ottenere informazioni sul computer
E rimanete sintonizzati per il resto della serie per tutta la settimana.
Utilizzo dei cmdlet batch
All'inizio della serie, quando ti abbiamo presentato alla pipeline, ti abbiamo mostrato come puoi prendere gli oggetti che un cmdlet emette e passarli come input a un altro cmdlet usando qualcosa di simile a questo:
Get-Process -Name notepad | Stop-Process
Questo ucciderebbe qualsiasi processo con il nome "notepad". Ma probabilmente ti starai chiedendo come PowerShell sia in grado di uccidere ogni istanza del blocco note con un singolo comando. La risposta si trova all'interno del cmdlet Stop-Process.
help Stop-Process –Full
Se guardi l'ultima riga di codice nella sezione della sintassi, puoi vedere che il parametro InputObject accetta un oggetto di tipo Process , e ogni volta che vedi un tipo seguito da due parentesi quadre come questo significa che il parametro accetta uno o più del tipo precedente. In questo caso, accetta uno o più oggetti processo. Tecnicamente, diremmo che il cmdlet InputObject accetta un processo schieramento. Ogni volta che si dispone di un cmdlet che supporta le operazioni batch in questo modo, utilizzarlo. Questa è la scelta numero uno.
Utilizzando WMI
Anche se WMI non è il miglior pezzo di tecnologia da spedire dal Microsoft HQ, arriva in secondo luogo nella lista di come lavorare con le collezioni di oggetti. Potremmo facilmente ottenere un elenco di processi in esecuzione dalla classe Win32_Process in questo modo:
Get-WmiObject –Class Win32_Process
Get-WmiObject –Class Win32_Process | Get-Member
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
Enumerazione
In mancanza degli altri due metodi, se devi fare qualcosa a un gruppo di oggetti, puoi enumerare l'intero oggetto e agire su ogni singolo oggetto. Per prima cosa devi trovare il metodo che useresti per fermare un singolo processo.
Get-Process | Get-Member -MemberType Method
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
Sommario
Scelta Uno
Get-Process -Name notepad | Stop-Process
Scelta Due
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
Scelta tre
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
Questo è tutto per questa volta gente, ci vediamo la prossima settimana per più divertimento con PowerShell.