už Jsme se naučili hodně o PowerShell. Naposledy jsme pracovali s WMI: PowerShell pro začátečníky (Část 9): Získejte vše z Windows s PowerShell a WMI nyní je podle mého názoru nejlepší čas zaměřit se na téma „filtrování pomocí PowerShell“. Ale nejprve se podívejme na cvičení z poslední části.
všechny díly série naleznete zde: PowerShell pro Začátečníky (Série)
Recenze (Část 9)
Tady je zadání a řešení z část 9:
Načíst informace o pevném disku. Použijte Get-WmiObject nebo Get-CimInstance. Nejprve vyhledejte objekt WMI a jakmile jej najdete, zobrazí název, oddíly, Model, Firmware a sériové číslo.
nejprve musíme zjistit název instance WMI. Vzhledem k tomu, že úloha se týká pevného disku, mohli bychom hledat například *disk*.
Get-WmiObject *disk* -List
Win32_DiskDrive zní dobře. Vzpomeňte si na dvě metody krok od části 8 pro získání více z PowerShell:
Get-CimInstance win32_diskdrive | Get-Member
Zde najdete vhodné atributy. Nyní použijte Select-Object, aby si je všechny.
Get-CimInstance Win32_DiskDrive | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber
recenze
WMI (nástroje pro správu systému Windows) poskytuje přístup ke čtení a zápisu téměř ke všem nastavením systému Windows. Existují dva důležité rutiny: Get-WmiObject a Get-CimInstance.
proč filtrování?
filtrování je klíčovou technologií v PowerShell. Jakmile víte, jak filtrovat, získáte více z PowerShell.
no, mým úkolem pro tuto část je vysvětlit, proč je filtrování důležité. Ok řekněme, že máte více než jeden pevný disk. Výše uvedený výstup zobrazuje všechny pevné disky. Chcete však například zobrazit pouze pevné disky Samsung.
proč byste to chtěli udělat? Možná se vás váš šéf zeptá, kolik disků Samsung se používá. Na všech počítačích. Pamatujte, že WMI a PowerShell vám umožňují provádět vzdálené dotazy. Ok zpět k tématu. Chceme pouze Samsung SSD s 500 GB. Sledujte parametr filtru!
Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber
následující je trochu neobvyklé a pro pokročilejší pitomce PowerShell, ale proč ne? Následující příkaz získá všechny SSD disky Samsung ze všech počítačů domény, ale ne ze serverů.
Get-CimInstance Win32_DiskDrive -Filter "Model='Samsung SSD 850 EVO 500GB'" -ComputerName (Get-ADComputer -Filter {operatingsystem -notlike '*server*'}).Name | Select-Object Name,Partitions, Size,Model,FirmwareRevision,SerialNumber
Pokud si vaši kolegové myslí, že čelíte neřešitelnému problému, stačí stisknout tlačítka a ukázat jim, co můžete udělat. 😉
Ok, pojďme na příklady pro začátečníky.
filtrování objektů
pamatujete si příkaz Get-ChildItem? Tento příkaz jsem v této sérii používal velmi často.
Pokud spustíte Get-Help Get-ChildItem, najdete v nápovědě mnoho příkladů filtrování.
Get-Help Get-ChildItem -Online
dávám přednost použití místní nápovědy.
Get-Help Get-ChildItem -Examples
co jsme se zatím naučili?
filtrování je klíčovou technologií v PowerShell. Jakmile pochopíte, jak filtrovat, získáte více z PowerShell.
filtrování objektů služby Active Directory
Pokud jste It-Pro, pravděpodobně pracujete v prostředí služby Active Directory. Filtrování je klíčovou technikou při práci s objekty služby Active Directory.
následující příkaz používá Filtr parametr, aby se všichni uživatelé, které jsou vypnuty:
Get-ADUser -Filter {enabled -eq 'false'} | Select-Object Name
možná se divíte, jak znám názvy atributů? Zapamatujte si metodu 2 kroků, abyste získali více z objektů: 1. použijte Get-Member 2. použijte Select-Object.
parametr filtru
pojďme se rozhlédnout. Které příkazy používají parametr filtr? Všimněte si, že jsem na řadiči domény.
Get-Command -ParameterName Filter
jak vidíte, parametr filtru se většinou používá v příkazech služby Active Directory. A musím přiznat, že parametr filtru jsem vždy používal pouze pro službu Active Directory. Tak to prostě je. Soustřeďme se tedy na Active Directory. Řekněme, že chceme všechny počítače domény (operační systém serveru a klientský operační systém) seřazené podle operačního systému. K tomu musíme použít parametr filtr s *.
Get-ADComputer -Filter * -Properties Name,Operatingsystem,OperatingSystemVersion,IPv4Address | Sort-Object OperatingSystem | Select-Object Name,OperatingSystem
z hlediska filtrování to byl jednoduchý úkol.
metoda filtrování
nyní se snažíme získat všechny počítače s nainstalovaným systémem Windows 10. Za tímto účelem musíme parametr filtru umístit do zakřivených závorek.
Get-ADComputer -Filter {operatingsystem -like '*windows 10*'}
je čas rozebrat podrobnosti.
závorky
vložte filtr do zakřivených závorek.
atributy
dále zjistěte název vlastnosti (atributy). Již jsme o tom diskutovali v PowerShell pro začátečníky (Část 8): síla PowerShell-kontakt s objekty(Get-Member, Select-Object). Pamatujte na dvoustupňovou metodu!
Get-ADComputer client01 -Properties * | Get-Member
boční poznámka: poznamenejte si parametr vlastnosti. Ve službě Active Directory nejsou ve výchozím nastavení zobrazeny všechny vlastnosti.
operátoři
dále používají operátor.
operátor může být-like, – as, – equal, – ne a tak dále … pro více informací o parametrech typu
help about_operators
otevře se textový soubor uložený v počítači.
příkaz
Pokud chceme něco filtrovat, potřebujeme podmínku. Tato podmínka musí být uvedena v uvozovkách.
recenze
Pokud pracujete s filtry, podívejte se nejprve do sekce Nápověda. Filtry jsou obvykle umístěny v závorkách. Často se také používá operátor.
některé další příklady filtrů … bez velkého mluvení …
hledání uživatelů, kteří mají špatný počet hesel 0. Zde je příklad účtu Petra:
Get-ADUser -Filter {badpwdcount -eq '0'} | Select-Object Name
vyhledávání uživatelů, kteří mají špatný počet hesel 0 a jsou povoleni. (Uvidíte, že Petra není povolena).
Get-ADUser -Filter {(badpwdcount -eq '0') -and (enabled -eq 'true')} | Select-Object Name
Zobrazit všechny počítače domény Windows Server, ale pouze ty, které jsou se systémem Windows Server 2016 a jejichž jména začínají na DC.
Get-ADComputer -Filter {(operatingsystem -like '*2016*') -and (name -like 'dc*')}
ale někdy musíme najít jinou cestu. Konkrétně, když není k dispozici žádné filtrování. Pak použijeme kde-objekt.
filtrování pomocí kde-Object
kde-Object je vždy na pravé straně potrubí. Filtrování vlevo. Co to znamená, klady a zápory na konci příspěvku. Pro tuto část se zaměříme na to, kde-objekt.
zde je několik příkladů z Nápovědy PowerShell.
Get-Process | Where-Object {$_.handles -gt 200 -and $_.name -eq "svchost"}
Get-ChildItem c:\scripts | Where-Object {$_.length -gt 100000}
chtěl bych však použít příklad z jednoho ze svých příspěvků.
Get-Hotfix | Where-Object HotfixID -like KB31*
věnujte pozornost HotFixID. Odkazuje na atribut.
doporučený postup (kvůli zpětné kompatibilitě) vypadá takto:
Get-Hotfix | Where-Object {$_.HotfixID -like 'KB31*'}
je tu něco nového. Co znamená$_?
$_ je proměnná, která iteruje nad každým objektem/prvkem předaným z předchozího (potrubí). Jednoduše řečeno: vezměte hotfixID z každého objektu, který pochází z potrubí.
filtrování vs. kde-Object
Pokud není k dispozici žádný filtr, použijte kde-Object. Pokud jste schopni použít filtr na levé straně potrubí, použijte jej! Proč? No, je rozdíl, zda pošlete 1000 objektů přes potrubí nebo jen 500, v případě, kde-objekt všechny objekty musí projít potrubím a teprve pak jsou filtrovány. Pamatujte potrubí od část 7: PowerShell pro Začátečníky (Část 7): Potrubí (a mnoho příkladů hrát s)
Recenze
Kde-Objekt je vždy na pravé straně potrubí. Filtrování vlevo. Pokud máte na výběr mezi filtrem na levé straně potrubí nebo kde-objekt na pravé straně, vyberte levou stranu.
cvičení
zde je cvičení do další části.
kde-Object:
použijte Get-Service a kde-Object k zobrazení pouze spuštěných služeb.
filtr (vyžaduje se Active Directory):
pomocí parametru filtr získáte všechny uživatele, kteří jsou zakázáni.
Uvidíme se příště u tématu: PowerShell pro začátečníky (Část 11): zábava s PowerShell disky
Patrick Gruenauer, MVP PowerShell