Navigation

PowerShell - jak na to, základy

http://en.wikipedia.org/wiki/Windows_PowerShell
http://www.powershellpro.com/powershell-tutorial-introduction/powershell-tutorial-conditional-logic/
http://pechanec.cz/windows-powershell/

Windows 7 - %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -noprofile
ISE - grafický editor/studio na skriptování
PowerGUI.org - Lepší než ISE, SW třetí strany (není vyvíjen MS)

Názvosloví:
Cmdlet - specializované třídy, napsané v .NET kompatibilním jazyce

Klávesové zkratky:
Doplňování - Tab/Shift Tab
Historie (šipky, F7, *-History, Get-History)
Profily  (stroj, uživatel)
Aliasy (výchozí mohou mít konflikt s uživatelským) profile.ps1
Klávesové příkazy - F1-F12
#g - historie od G

Základy:
- žádné skripty (Get(Set)-ExecutionPolicy restricted
.ps1 asociováno s Notepad
Vyžadováno určení cesty .\skript.ps1 nebo absolutně (C:\skript.ps1)
Get-ExecutionPolicy
Set-Execution Unrestricted˘

Parametry:
- pojmenované: Get-EventLog -Logname System
- poziční: Get-EventLog System
- povinné: LogName:

Přepínače:
- společné (about_CommonParameters)
- "Cmdletové"

Filtry
- include/-exclude Get-Service -include a*
- filter Get-ADuser -filter {Name -eq "Admin"}
 
Zřetězíme příkazy svislítkem
- výstup se odesílá pomocí objektu
 
Where-Object
Get-Service | Where-Object{$_.Status -eq "running"}
- $ tj.každý řádek
 
Sort-Object
Get-Process | sort-object VM -Descending
 
Select-Object
Get-Process | select ProcessName, ID
 
Výstupy, Exporty, Importy
Out-File
Out-Printer
Out-Null
Out-GridView
Export-CSV (Import-CSV)
Export-Clixml (Import-Clixml)
 
Práce s texty
Get-Content
Select-String
Get-Content soubor.txt -Encoding UTF7 | Set-Content test.txt -Encoding UTF8
 
Import modulů pro AD
Get-Module (nainstalované)
Get-Module -ListAvailable (k dispozici)
Import-Module ActiveDirectory
Get-Command -Module ActiveDirectory
 
Rozvoj - Proměnné
Proměnné
- Uvezené "$"
- "Beztypové"
- Lze i příště typové
 
$prvni = 1
$prvni = "Retezec"
[Int32]$Druha = 4
$Druha = "Text"
$Procesy = Get-Process
Get-Date | Get-Member
 
$now = Get-Date
$now.day
10
 
- Dočasná proměnná
(Get-Date).day
 
Pole
$pole = 1,2,3,4 # $pole[2]
$pole[-1] - pocet prvku
$pole += 5 (přidání do pole)
 
$servery = "Server1","S2","S3"
Get-Service -ComputerNAme $servery
 
Hash table (pojmenované pole)
$dny = @{"Prvni"="Pondeli";"Druhy"="Utery"}
$dny.Prvni
 
Operátory
Aritmetické (-AND, -OR)
Přiřazovací
Porovnávací 
Logické
Přesměrování (>, >>, 2>, and 2>&1)
Typové (-is, -isnot, -as)
Ostatní
 
help about_operators
 
 
Por. operátory
-eq: Equal to
-ne: Not equal to
-le: Less than or equal to
-gt: Greater than
-lt: Less than
-like:
-nolike
-match
-notmatch
-contains
-notcontains
-replace
 
Senzitivní varianty c* i* (ceq,ieq)
Get-Service | where {$_.Status -like "run*"}
Get-Service | where {$_.Status -like "run*" -OR $_.Status -like "Stop*" }
5 -eq 4
 
$False (neni promenna)
 
Cykly
While
Do-While
For (užívá se v pipelajně)
Foreach
 
$i = 1
do {
  $i++
} while ($i -le 5)
 
 
Podmínky
If (podmínka) {blok}
Elseif {blok2}
 
Get-Process | foreach {if($_.VM -gt 400MB) {Write-Host $_.Name,$_.VM}}
 
Větvení - switch (U verzí systemu či verzí programů)
$verze = "V1"
switch ($verze) {
  V1 {"Windows 1"; break}
  V2 {"Windows 2"; break}
Default {"Neznama verze"}
 
Switch [-regx|-wildcard|-exact][-casesensitive]
 
Rozvoj - Identity, hesla
Read-Host "Heslo"
Read-Host "Heslo" -AsSecureString
ConvertTo-SecureString
$heslo = Read-Host "Heslo" -AsSecureString
Get-Credential
 
Measure-Object
Get-Member
 
$lide = Import-CSV .\lide.csv -Delimiter ";"
$lide[0..2] | Select Prijmeni, email
 
Get-Command *service
cmdlet New-Service (Zaregistruje novou sluzbu - snad cehokoliv)
 
Get-Process
Stop-Process IDProcesu(Calc)
Get-Process Calc | Stop-Process
Get-Process Calc | Get-Member
 
$calc = Get-Process Calc
$calc.kill()
 
 
Ukoly
1) Běžící služby zeleně, neběží červeně (použij: Get-Service, Foreach, If)
Get-Service | foreach {if($_.Status -like "Running") {Write-Host $_.Status, $_.Name -ForegroundColor Green} else {Write-Host $_.Status, $_.Name -ForegroundColor Red}}
 
2) Pět největších souborů a složek v ProgramFiles
get-childitem -recurse | Sort Length -Descending | select Name, Directory, length -First 5
 
3) Všechny soubory na disku od Admina (použij: Get-Aoc)
Get-Acl * | Where-Object{$_.Owner -like "BUILTIN\Administrators"}
 
Otázky
Pojmenování a spouštění skriptu (ps1?)
Spouštění skriptu
Funkce
Cykly
Roury
Grep
V1, V2, V3, V4 (jak importovat moduly/framework?)
- po restartu zůstává importovaný/deimportovat?
Přesměrovat do souboru
Get-Service | Out-File C:\_Data_\sluzby.txt