Windows PowerShell je velmi zajímavý nástroj, který nemusí sloužit pouze administrátorům, ale i programátorům jako vývojová platforma. V této sérii se pokusím popsat možnosti PowerShellu od základních příkazů a skriptování, přes tvorbu vlastních CmdLetů v .NETu až po používání PS jako součást Vaší aplikace. V tomto díle si ukážeme základní nastavení PowerShellu a nějaké základní příkazy.
Po nainstalování PowerShellu jej můžete spustit.
Pokud to s PowerShellem myslíte vážně, doporučuji nainstalovat si zároveň nějaký vývojový nástroj, který vám dopřeje zvýrazňování syntaxe, pohodlný debugging a mnoho dalšího. Mým oblíbeným je PowerGui (http://powergui.org)
PowerShell je “case insensitive” tzn. můžete používat velká/malá písmenka dle libosti bez rozdílu, na rozdíl od jazyků z rodiny C. Dva pro začátek nejdůležitější příkazy jsou:
Get-Command #zobrazí seznam dostupných příkazů
Get-Help cmdName #zobrazí nápovědu k danému příkazu lze používat masky (Get-Help get-* zobrazí všechny příkazy začínající na Get-)
Za zmínku ještě stojí některé přepínače u příkazu Get-Help:
Get-Help cmdName -Examples #zobrazí příklady s příkazem
Get-Help cmdName -Detailed #zobrazí detailní popis příkazu
PowerShell používá takzvané user profily. Jedná se v podstatě o skript, který se spustí při každém spuštění PS. Tyto profily se jmenují profile.ps1. Profil uživatele naleznete v Dokumentech ve složce PowerShell. Globální profil naleznete ve složce Windows\System32\WindowsPowerShell\*. Vždy se spustí globální profil i profil daného uživatele.
Zároveň, aby jste mohli v PS spouštět skripty (týká se i profilů) musíte nastavit tzv. “execution policy”. Jedná se o to, že standardně je v PowerShellu zakázáno spouštět jekékoliv skripty. Pokud chcete toto nastavení změnit (pokud nechcete, omezujete PS v podstatě na cmd.exe s více příkazy a pipe line) musíte spustit příkaz:
Set-ExecutionPolicy –ExecutionPolicy $settings
Kde $settings nahraďte za jednu z těchto možností:
unrestricted |
povoleny všechny skripty |
allsigned |
skripty podepsané certifikátem |
restricted |
žádné skripty |
Určitě se vám také bude hodit příkaz (oba řádky dělají to samé –> jména parametrů lze vynechat a poté záleží čistě na jejich pořadí).
Set-Alias -Name $newName -Value $oldName
Set-Alias $newName $oldName
Tento příkaz je velmi důležitý, neb PowerShell je značně “upovídaný” jazyk. Toto má své výhody (kdo zná třeba bash, tak mi dá za pravdu), protože veškeré názvy příkazů jsou logické a snadno odvoditelné. Nicméně používáte-li jeden příkaz často, omrzí vás psát celý název. Příkaz Set-Alias jak název napovídá nastaví alias k původnímu příkazu. Nemusí se jednat pouze o CmdLet (interní příkaz PowerShellu), ale klidně o nějaký skript, případně cestu k exe souboru (get-help set-alias –examples napoví o všech možnostech využití).
Na závěr pár dalších příkazů, bez kterých se neobejdete:
Get-Location #vypíše adresář, ve kerém se nacházíte
Get-ChildItem #něco jako příkaz dir v cmd.exe, má defaultní alias ls
Get-ChildItem -Include $pattner #vypíše podsoubory, které splňují $pattern(např. *.exe)
Get-ChildItem -Recurse #probublává rekurzivně do podsložek
Get-Content $fileName #vypíše obsah souboru $fileName
Set-Content -Path $fileName -Value $content #zapíše do souboru $fileName obsah $content
Push-Location #uloží aktuální lokaci na zásobník
Pop-Location #přemístí se na lokaci, která je na vrcholu zásobníku
Remove-Item $fileName #odstraní soubor $fileName
Remove-Item $fileName -Force -Recurse #odstraní soubor/složku $fileName a to i v případě, že složka není prázdná, případně soubor je chráněn proti přepisu
Get-Process #vypíše běžící procesy
Stop-Process -Name $processName #ukončí proces $processName
Copy-Item $item -Destination $newDestination #skopíruje soubor
New-Item -ItemType file -Name $name #vytvoří soubor $name
New-Item -ItemType directory -Name $name #vytvoří složku $name
Get-Service #vypíše soupis service
Stop-Service $name #zastaví service $name
Start-Service $name #nastartuje service $name
Nyní byste měli být schopní používat PowerShell jako plnohodnotnou náhradu cmd.exe a možná i trochu víc. V příštím díle se vrhneme na práci s PipeLine.