Zobrazují se příspěvky se štítkemmodule. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemmodule. Zobrazit všechny příspěvky

sobota 27. března 2010

Modul FileSystem

Součástí PowerShellPack-u je několik modulů. Jedním z nich je i FileSystem.
Poznámka: Pokud jste ještě PowerShellPack nezkoušeli, můžete si jej bezplatně stáhnout. Je také součástí Windows 7 Resource Kitu. Obsahuje několik zajímavých modulů. Několika z nich se budu v dohledné době na těchto stránkách věnovat.
Pro práci s modulem jej musíme nejdříve importovat.

PS C:\Scripts> Import-Module FileSystem
PS C:\Scripts> Get-Module

ModuleType Name
---------- ----
Script FileSystem


Příkazy modulem exportované pro použití zjistíme pomocí Get-Command.

PS C:\Scripts> gcm -Module FileSystem | ft Name

Name
----
Copy-ToZip
Get-DuplicateFile
Get-FreeDiskSpace
Get-SHA1
Mount-SpecialFolder
New-Zip
Rename-Drive
Resolve-ShortcutFile
Start-FileSystemWatcher


Pojďme si všechny dostupné příkazy (funkce) projít.

New-Zip, Copy-ToZip
New-Zip vytvoří prázdný archiv, do kterého potom můžete přidávat soubory pomocí Copy-ToZip. Vzhledem k tomu, že Copy-ToZip vytvoří archiv, pokud neexistuje, přijde mi New-Zip trochu nepotřebný. Copy-Zip jsem využil opravdu jenom na základní věci. Při komprimování většího množství dat se výsledný archiv choval poněkud zvláštně (špatné cesty, zdvojené soubory, ...).
Rename-Drive
Jednoduchá funkce, která zapouzdřuje volání třídy Win32_LogicalDisk z WMI. Myslím, že nepřináší nic nového.

Get-FreeDiskSpace
Zobrazuje volné místo na disku v procentech a absolutně. Bohužel je výstup na první pohled poněkud zvláštní a tak bych doporučil ho mírně formátovat, například takto:

(Get-FreeDiskSpace).countersamples |? {$_.instancename -eq 'c:'} | ft -a

Path InstanceName CookedValue
---- ------------ -----------
\\PC\logicaldisk(c:)\% free space c: 23,7249711709823
\\PC\logicaldisk(c:)\free megabytes c: 36210


Resolve-ShortcutFile
Se hodí v případě, že máte soubor s příponou url a potřebujete zjistit, kam tento soubor odkazuje.

Get-SHA1
Dle názvu správně hádáte, že výstupem této funkce je hash zadaného souboru. Tuto funkci využívá ta následující.

Get-DuplicateFile
Pokud máte pocit, že některé soubory máte na disku vícekrát, můžete je pomocí této funkce zjistit.


PS C:\tmp> Get-DuplicateFile | fl Name, Value
Name : TlRNG4ETIySjh3rHonlURNSqPtU=
Value : {C:\tmp\2.JPG, C:\ts\tmp\Copy of 2.JPG}

Name : veSzujcoGoW+LpjcFAily548z9o=
Value : {C:\tmp\9.JPG, C:\tmp\Copy of 9.JPG}

Name : Ddx0Vo+oW0m2oRLB3WmnTmZsP78=
Value : {C:\tmp\0.JPG, C:\tmp\Copy of 0.JPG}



Mount-SpecialFolder
Přidá Special Folders jako další drives (dostupné pomocí Get-PsDrive). Mimochodem, tato funkce je spouštěna při importu modulu.

Start-FileSystemWatcher
Kontoroluje souborový systém a při změně spustí zadanou akci. Můžete tedy například sledovat nové soubory v určitém adresáři.

PS C:\Scripts> Start-FileSystemWatcher -File .\Secret -On Created `
-Do { $((ls c:\Scripts\Secret | Sort CreationTime -Descending | Select -First 1).FullName) >> c:\zapsano.txt}


Při vytvoření jakéhokoli souboru se plný název tohoto souboru zapíše do zapsano.txt. Bohužel má tato funkce jednu obrovskou nevýhodu. Neexistuje k ní Stop-FileSystemWatcher. Takže je na vás použít standardní cmdlety, abyste sledování zastavili.

čtvrtek 28. ledna 2010

PSRemoteRegistry modul

[EN: Autotranslation]

Jak jsem již psal v posledních Get-PSNews, Shay Levy publikoval modul PSRemoteRegistry. Než se vrhneme na popis, podívejme se, jaké možnosti pro přístup do registru (lokálně či vzdáleně) máme nyní.

  1. Lokálně přes PSDrives: Get-PSDrive -PSProvider *Registry - asi nejčastější metoda, kterou budete používat z konzole nebo ve skriptech.
  2. Vzdáleně přes např. Invoke-Command, Enter-PSSession, ...
  3. Vzdáleně či lokálně přes WMI pomocí třídy StdRegProv. Obsahuje množství zajímavých metod, pokud jste v dobách VBS chtěli prohledat vzdálený registr, byla metoda EnumKey možná vaše první volba.
  4. Vzdáleně či lokálně před .NET třídy Microsoft.Win32.Registry*

Právě čtvrtý způsob využívá popisovaný modul, který zmiňované třídy zapouzdřuje do funkcí. Stáhnout si jej můžete z MSDN, kde je zároveň popsáno, jak jej správně importovat do PowerShellu. Seznam dostupných funkcí je vypsán na stránkách modulu, sami si jej můžete vylistovat pomocí Get-Command -Module PSRemoteRegistry. V tomto článku se můžete podívat na matici funkcí a dostupných parametrů. Součástí modulu je i tématická nápověda about_RemoteRegistry_Module.

Nejprve si ukážeme práci s lokálním počítačem a na konci článku uvedu, jak se lze dotazovat vzdálených počítačů. Otestujme, jestli existuje námi požadovaná větev.

PS C:\> Test-RegKey -Key "SOFTWARE\Makovec"
False



Neexistuje, takže ji vytvoříme

PS C:\> New-RegKey -Key SOFTWARE -Name Makovec
PS C:\> Test-RegKey -Key "SOFTWARE\Makovec"
True



Výborně, nyní si vytvoříme pár testovacích hodnot

PS C:\> 1..10 | % { Set-RegString -Key SOFTWARE\Makovec -Value "RegString$_" -Data $(Get-Random) -Force }



Všimněte si parametru -Force. Pokud jej neuvedete, budete vyzváni, abyste potvrdili zápis (bezpečnostní pojistka). Nyní si můžeme hodnoty zkontrolovat.

PS C:\> Get-RegKey -Key SOFTWARE -Name Makovec
ComputerName Hive Key SubKeyCount ValueCount
------------ ---- --- ----------- ----------
NETBOOK LocalMachine SOFTWARE\Makovec 0 10

PS C:\> Get-RegKey -Key SOFTWARE -Name Makovec | Get-RegValue
ComputerName Hive Key Value Data Type
------------ ---- --- ----- ---- ----
NETBOOK LocalMachine SOFTWARE\Makovec RegString1 1249268748 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString2 1967993881 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString3 1010703330 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString4 86413294 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString5 917742177 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString6 74280723 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString7 526159413 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString8 205545931 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString9 286790375 String
NETBOOK LocalMachine SOFTWARE\Makovec RegString10 2007859651 String



Pojďme si ukázat příklad ze života. Potřebujeme zjistit, na jakém portu komunikuje náš SMS klient na jednotlivých počítačích.

PS C:\> 'PC1','PC2','PC3','PC4' | Get-RegValue -Key SOFTWARE\Microsoft\CCM -Value httpport | ft ComputerName, Value, Data -AutoSize

ComputerName Value Data
------------ ----- ----
PC1 HttpPort 1234
PC2 HttpPort 1111
PC3 HttpPort 1234
PC4 HttpPort 1234


Vidíme, že PC2 potřebuje nutně změnu. Pokud pustíte skript přes více počítačů ve vaší síti, může se stát (a určitě se stane), že některé počítače budou nedostupné a obdržíte chybovou zprávu: Get-RegValue : Exception calling "OpenRemoteBaseKey" with "2" argument(s): "The network path was not found. Pro tyto případy jsou všechny funkce z PSRemoteRegistry modulu vybaveny parametrem -Ping a pokud jej použijete dostanete jasnou zprávu, kde se stala chyba.

PS C:\> 'PC1','PC2','PC3','PC4' | Get-RegValue -Key SOFTWARE\Microsoft\CCM -Value httpport -Ping | ft ComputerName, Value, Data -AutoSize

WARNING: [PC2] doesn't respond to ping.
WARNING: [PC3] doesn't respond to ping.
ComputerName Value Data
------------ ----- ----
PC1 HttpPort 1234
PC4 HttpPort 1234


Do připravovaného článku pro TechNet Flash jsem přidal ukázku, jak použít předchozí příklad na všechny počítače ve vaší doméně. Abych nezapomněl, měli bychom po sobě uklidit.

PS C:\> Remove-RegKey -Key SOFTWARE\Makovec -Force


Musím přiznat, že PSRemoteRegistry jsem okamžitě přidal do svého profilu a za těch pár dní, co jej používám se stal nenahraditelným pomocníkem. Pokud budete někdy potřebovat přistupovat ke vzdáleným registrům, tento modul je pro vás prostě must have.