Seriál: Windows Powershell - souborový systém a registry (část 5.)

Po minulém díle, kdy jsme se podívali do hloubi systému si dnes dáme trochu oddechovější část – práci se souborovým systémem a registrem. Nejdříve se ale podíváme na ideu takzvaných PSDrives.

„Vše je drive.“ By mohla znít parafráze známého „vše je soubor“.

Již ve verzi 1 PowerShellu byly PSDrives zavedeny. Jedná se o snahu jak zjednodušit přístup ke stejným/podobným částem systému tak, abyste je již jednou naučenou věc nemuseli učit znovu. Jako příklad porovnáme souborový systém a registr. Vžíjte se do doby středověku Windows (tedy doby, kdy ještě neexistoval PowerShell). Pokud pomineme Windows Explorer a Registry Editor (ale jako administrátoři jste je stejně nepoužívali), mohli jste použít cmd.exe a reg.exe. Oba dva příkazy určitě znáte, ale dovolím si tvrdit, že reg.exe používáte velmi málo už jen z toho důvodu, že jeho syntaxe je „prostě jiná“ (netvrdím, že REG QUERY používám každý den 100x – regedit vede na celé čáře). PSDrives přináší výhodu v tom, že se zbavujeme onoho „prostě jiná“ a pohybujeme se v registru (ale nejen tam, jak uvidíme vzápětí) pomocí příkazů známých z cmd.exe. Čili převedeno do řeči PowerShellu, jestliže vím, že příkazem

ps1

Vylistuji obsah adresáře, můžu příkazem

ps2

Vylistovat obsah registru. A co teprve zábava s příkazem

ps3

Který zobrazí certifikáty. Chcete-li zjistit, co vše je vlastně PSDrive, můžete zkusit cmdlet Get-PSDrive (případně tématickou nápavědu about_Providers). Měli byste vidět minimálně následující seznam:

ps4

Pokud používáte PowerShell v1, nebudete mít v seznamu poslední položku (WsMan). Nyní vidíte, proč jsem mohl použít dir hklm: a dir cert: - stejným způsobem můžete prozkoumat například aliasy nebo funkce. Určitě se vám bude hodit náhrada za příkaz set, zkuste

ps5

Základy souborového systému

Ukážeme si nyní základní příkazy pro pohyb a práci v souborovém systému (a tedy i ostatních PSDrives). Souborový systém volím z toho důvodu, že je asi nejnázornější pro výklad.

Základem jsou příkazy známé již od dob MS-DOSu (dir, cd, copy, ...) nebo například z lixových OS (ls, man, ...). V PowerShellu jsou tyto příkazy definovány jako aliasy, např. dir je alias pro Get-ChildItem. Vyzkoušejte si příkazy, které znáte z cmd.exe, a zkuste vypátrat jejich cmdlety. Můžete samozřejmě hledat i cmdlety pro příkazy copy, move, rm, ... Brzy zjistíte, že končí slovem item, čili můžete vyzkoušet

ps6

U většiny z nich není asi potřeba něco dodávat. Trošku výjimečným případem je Invoke-Item, který spustí defaultní akci nad volaným objektem (např. otevře textový soubor v editoru), čili

ps7

vytvoří textový soubor, naplní jej zadaným textem a poté jej otevře v editoru, který je nastaven jako primární pro otevírání textových souborů. Na mém počítači je výstupem toto okno:

ps8

1.3 Práce s ACL

Při mých prezentacích pro administrátory sklízí asi největší obdiv příkazy pro práci s ACL. Vždy je ukazuji na následujícím příkladu. Máme za úkol vytvořit adresářovou strukturu pro nově vzniklá oddělení. Potřebujeme adresáře od písmena A do Z a pro tyto adresáře musíme nastavit předem daná práva (různá dle oddělení). V Exploreru noční můra, v PowerShellu zábava. Všimněte si i použítí ostatních cmdletů určených pro práci s PSDrives.

ps9

Chcete-li více informací k tomuto příkladu i celé prezentaci, můžete se podívat na tento příspěvek.

Pokud spravujete file server, určitě se vám budou cmdlety Get-Acl a Set-Acl hodit. Vzhledem k tomu, že je můžete využívat v rouře stanou se vám určitě výtanými pomocníky. Nezapomeňte na PSDrives – oba dva příkazy můžete použít také pro práci s registry.

Registr

Jelikož cmdlety pro práci s registry jsou stejné jako pro práci se souborovým systémem, podíváme se rovnou na jedno úskalí. Při práci s registry nás čeká jedno nepříjemné překvapení. Zkusme:

ps10

Místo očekávaného seznamu programů spouštěných při startu systému dostáváme jakýsi zvláštní, nicneříkající výpis. Pokud chceme zjistit požadované informace, musíme použít jiný cmdlet – hodnoty v určitém klíči jsou totiž považovány za vlastnosti tohoto klíče (v našem případě větev Run). Použijeme proto Get-ItemProperty a výsledkem bude očekávaný výstup

ps11

Jelikož pracujeme opět s objekty, není problém získat konkrétní hodnotu nějakého klíče

ps13 

Další PSDrives

Jak by se vám líbilo, kdybyste mohli požít následující příkaz:

PS C:\> cd ad:

Zde parazituji na názvu jiného článku (https://www.jonathanmedd.net/2009/11/cd-ad-wow.html), ale asi tušíte, co vás čeká. Přístup do Active Directory přes PSDrives a práce s účty podobná jako se soubory. Pokud vás práce v AD před PowerShell zajímá více, měli byste věnovat svou pozornost tomuto blogu. Pokud ještě nemáte doménu s Windows 2008 R2 serverem nebo nepoužíváte Active Directory Management Gateway Service, můžete použít PSCX, které PSDrive pro Active Directory také obsahují.

Pro administrátory SQL Serveru 2008 není například neznámý PSDrive SQLSERVER.

ps14

- David Moravec

Další díly seriálu:
Seriál: Windows Powershell – PS pro programátory (část 6.)
Seriál: Windows Powershell – dolujeme data aneb jak na WMI (část 4.)
Seriál: Windows Powershell – roury a aliasy (část 3.)
Seriál: Windows Powershell – objekty a roury (část 2.)
Seriál: Windows Powershell – úvod (část 1.)