Toto je seznam položek, které jsme s kolegy považovali za užitečné při naší práci. Není zamýšlen jako encyklopedie, ale spíše jako místo pro zaznamenání věcí, které by se začátečníkovi mohly hodit, zejména věcí, jejichž vyřešení může trvat dlouho.
Tato stránka byla založena předtím, než O’Reilly vydalo Kuchařku prostředí Windows PowerShell od Lee Holmese. Knihu od O’Reillyho doporučuji, ale tato stránka s ní nesouvisí.
Viz také PowerShell gotchas.
- Odstavec
- Začínáme/instalace
- Instalace prostředí PowerShell
- Instalace knihovny Community Extensions
- Zbavte se hlášení „spouštění skriptů je zakázáno“
- Nastavte si „skripty:“. PowerShell drive location
- Konfigurace příkazového řádku
- Různé úlohy
- Zápis na obrazovku
- Výzva uživateli k zadání údajů
- Manipulace s daty
- Odeslat e-mail
- Spánek
- Vypsat adresář (rekurzivně)
- Otestujte, zda soubor existuje
- Čtení řádků souboru do pole
- Zápis do souboru
- Přejmenovat soubor
- Smazat soubor
- Práce s regulárními výrazy
- Rozdělení a spojení řetězců
- Uchopte webovou stránku
- Čtení a zápis do registru
- Rozumět uvozovkám
- Časování příkazu
- Převod textu na řeč
- Přístup ke schránce systému Windows
- Načtení sestavy .NET
- Spustit kód vytvořený za běhu
- Spustí program, který má v cestě mezeru
Odstavec
- Začínáme/instalace
- Instalace prostředí PowerShell
- Instalace knihovny Community Extensions
- Zbavte se hlášení „spouštění skriptů je zakázáno“
- Nastavení „skriptů“:
- Nastavte si „skripty“. Umístění jednotky PowerShell
- Konfigurace příkazového řádku
- Různé úlohy
- Zápis na obrazovku
- Poprosit uživatele o vstup
- Manipulace s daty
- Odeslání e-mailu
- Spánek
- Seznam adresářů (rekurzivně)
- Testování, zda soubor existuje
- Čtení řádků souboru do složky pole
- Zápis do souboru
- Přejmenování souboru
- Smazání souboru
- Práce s regulárními výrazy
- Dělení a spojování řetězců
- Vyhledávání webu stránky
- Čtení a zápis do registru
- Rozumění uvozovkám
- Časování příkazu
- Převod textu na řeč
- Přístup ke schránce Windows
- Načítání souboru .NET assembly
- Spustit kód vytvořený za běhu
- Spustit program s mezerou v cestě
Začínáme/instalace
Instalace prostředí PowerShell
PowerShell můžete získat na adrese:
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx
nahoru
Instalace knihovny Community Extensions
Knihovna PowerShell Community Extensions (PSCX) je k dispozici zde:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX
Jedná se o užitečnou kolekci rutin a funkcí. Instaluje kontextovou nabídku „PowerShell zde“ v aplikaci WindowsExplorer, která otevře okno příkazu PowerShell ve složce, na kterou kliknete pravým tlačítkem myši. PSCX také poskytuje ukázkový soubor Profile.ps1
.
Po instalaci PSCX zadejte man about_pscx
a zobrazte přehled rutin, zprostředkovatelů atd. dodávaných s PSCX.
nahoru
Zbavte se hlášení „spouštění skriptů je zakázáno“
První problém, na který pravděpodobně narazíte při spouštění skriptů prostředí PowerShell, je něco takového:
PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<
To je způsobeno výchozím nastavením zabezpečení v prostředí PowerShell, které zakazuje spouštění škodlivých skriptů.
Toto chování můžete změnit následujícím postupem:
PSH> set-executionPolicy RemoteSigned
Nyní budou digitální podepisování vyžadovat pouze skripty přicházející ze vzdálených zdrojů.
nahoru
Nastavte si „skripty:“. PowerShell drive location
Jakmile napíšete řadu skriptů PowerShell, může se vám hodit shromáždit je na jednom místě a vytvořit PSDrive s názvem scripts:
, abyste je rychle našli. Pro vytvoření takové jednotky PSDrive můžete do svého profilu PSCX přidat následující příkaz:
New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts
top
Konfigurace příkazového řádku
Pro konfiguraci příkazového řádku jednoduše vytvořte funkci s názvem prompt
a vložte ji do svého profilu. Například následující funkce způsobí zobrazení pracovního adresáře.
function prompt { "$pwd> " }
Všimněte si, že do funkce prompt
můžete vložit libovolný kód a tento kód se spustí vždy, když stisknete klávesu return.
top
Různé úlohy
Zápis na obrazovku
Pro zápis výstupu použijte Write-Host
. Volitelně můžete zadat -foregroundcolor
pro obarvení výstupu. Například chyby a varování mohou být zvýrazněny červeně.
Příklad:
Write-Host "Hello world" -foregroundcolor red
horní
Výzva uživateli k zadání údajů
Použijte Read-Host
.
Příklad:
$a = Read-Host "Enter your name"Write-Host "Hello" $a
nahoru
Manipulace s daty
Komenda get-date
vrací objekt DateTime
. Bez argumentu vrací aktuální čas a datum. S argumentem v podobě řetězce, který není třeba uvádět v uvozovkách, analyzuje řetězec na datum.
Příklad:
(get-date) - (get-date 7/4/1976)
Řetězce můžete také převést na objekt DateTime
pomocí funkce cast .
top
Odeslat e-mail
Použijete rutinu Send-SmtpMail
z PowerShell Community Extensions.
Příklad:
Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"
top
Spánek
Použijete rutinu Start-Sleep
. Ve výchozím nastavení trvá několik sekund, ale má možnost -milliseconds
.
Příklad:
Write-Host "hello"; Start-Sleep 5; Write-Host "world"
top
Vypsat adresář (rekurzivně)
Můžete použít příkaz dir
, což je vlastně alias příkazu Get-ChildItem
. Chcete-li adresář vypsat rekurzivně, stačí přidat volbu -recurse
.
Příklad:
dir f:\bin -recurse
top
Otestujte, zda soubor existuje
Použijete test-path
.
top
Čtení řádků souboru do pole
Použijte get-content
.
Příklad:
$a = (get-content foo.txt)
top
Zápis do souboru
Použijte Out-File
. Pokud nechcete výstup v Unicode, zadejte -encoding ASCII
Příklad:
$foo | out-file -encoding ASCII foo.txt
top
Přejmenovat soubor
Použijte Rename-Item
nebo jeho alias ren
.
top
Smazat soubor
Použijte Delete-Item
nebo jeho alias del
.
nahoru
Práce s regulárními výrazy
Podívejte se na Regulární výrazy v PowerShellu a Perlu.
nahoru
Rozdělení a spojení řetězců
Řetězce mají metodu split
. Argumentem metody split()
je řetězec obsahující znaky, které se mají rozdělit. Funkce ::split
je obecnější. Jejím prvním argumentem je řetězec, který se má rozdělit, a druhým argumentem je regulární výraz, na který se má rozdělit.
Příklad:
$a.split("`t ")
rozdělí řetězec $a
na pole řetězců, přičemž rozdělí všude, kde je tabulátor nebo mezera.
Příklad:
$a = "123,456,apple"; ::split($a, ",(?!\d)")
rozdělí $a
na čárky nenásledované číslicemi. Rozdělení by tedy vrátilo „123,456“ a „jablko“.
Pokud je rozdělovaný řetězec cestou systému Windows, můžete použít specializovaný příkaz Split-Path.
Pro spojení pole do jednoho řetězce použijte metodu ::join
. Prvním argumentem je znak oddělení a druhým pole.
Příklad:
$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)
Nyní $b
obsahuje „1*2*3“.
Nahoře
Uchopte webovou stránku
Použijte buď Get-Url
z PSCX, nebo objekt net.webclient
z .NET. První je stručnější, ale druhý umožňuje více možností.
Příklad:
$w = Get-Url "https://www.w3.org"
$w = (new-object net.webclient).DownloadString("https://www.w3.org")
Kód (new-object net.webclient)
vytvoří objekt WebClient
.NET s mnoha užitečnými metodami. Například můžete zavolat DownladFile
pro uložení přímo na disk, a ne do řetězce. K dispozici jsou také metody UploadData
a UploadFile
.
nahoru
Čtení a zápis do registru
Registrem se můžete pohybovat stejně jako souborovým systémem, i když je třeba znát některé podrobnosti.
Každý oddíl registru je jako disk. Chcete-li tedy například prozkoumat HKEY_CURRENT_USER
, můžete cd HKCU:
a pak pomocí cd
postupovat stromem dolů. Pro čtení použijte Get-ItemProperty
a pro zápis Set-ItemProperty
. Můžete také použít Remove-ItemProperty
pro mazání.
Příklad:
Následující příkazy vypíší obsah uzlu registru, který konfiguruje shell cmd.exe
. Nastavením CompletionChar
na hodnotu 9 zapneme doplňování tabulátorem.
cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9
Tento článek TechNet se věnuje podrobnějším informacím.
nahoru
Rozumět uvozovkám
PowerShell má čtyři druhy uvozovek: jednoduché a dvojité obyčejné uvozovky a jednoduché a dvojité uvozovky zde-řetězce. Uvnitř dvojitých uvozovek a dvojitých zde-řetězců jsou názvy proměnných nahrazeny jejich hodnotami a jsou interpretovány escape sekvence prostředí PowerShell. V jednoduchých uvozovkách a jednoduchých řetězcích here se názvy proměnných nerozšiřují a escape sekvence se neinterpretují. Například úryvek kódu
$a = "bar" 'foo`t$a', "foo`t$a"
vytvoří výstup
foo`t$a foo bar
protože uvnitř dvojité uvozovky se `t
expanduje na tabulátor a $a
na „bar“.
PowerShell here-strings jsou jako here-documents v Perlu. Uvnitř řetězce here nejsou dvojité a jednoduché uvozovky speciální, ale doslovně uvozené. Také zalomení řádků je zachováno.
Řetězec here-string začíná buď @"
, nebo @'
a končí stejnými symboly v opačném pořadí. Za otevírací značkou a před uzavírací značkou musí být nový řádek.
Příklad
$a = "bar" $b = @" foo "baz" 'qux' $a "@ $b
produkuje
foo "baz" 'qux' bar
a
$a = "bar" $b = @' foo "baz" 'qux' $a '@ $b
produkuje
foo "baz" 'qux' $a
Všimněte si, že za uvozovkou otevírající řetězec here nesmí být bílá mezera. Jinak se zobrazí hlášení „Nerozpoznaný token ve zdrojovém textu.“
Ačkoli vypadají podobně, řetězce here prostředí PowerShell a doslovné řetězce jazyka C# se poměrně liší. Následující tabulka shrnuje rozdíly.
C# verbatim strings | PowerShell here-řetězce |
---|---|
Může obsahovat zalomení řádků | Musí obsahovat zalomení řádků |
Jednotlivé varianty dvojitých uvozovek | Jednotlivé a dvojité varianty uvozovek |
Začíná znakem @“ | Začíná znakem @“ (nebo @‘) a zalomením řádku |
Končí znakem „ | Končí zalomením řádku a následným znakem „@ (nebo ‚@) |
Nemůže obsahovat un-escapovaných dvojitých uvozovek | Může obsahovat uvozovky |
Vypíná escape sekvence jazyka C# | ‚@ vypíná escape sekvence prostředí PowerShell, ale „@ ne |
nahoru
Časování příkazu
Pomocí Measure-Command
můžete měřit, jak dlouho trvá dokončení úlohy.
nahoru
Převod textu na řeč
Pomocí Out-Speech
z PSCX.
nahoru
Přístup ke schránce systému Windows
Pomocí rutin PSCX Get-Clipboard
a Out-Clipboard
lze číst ze schránky a zapisovat do ní.
nahoru
Načtení sestavy .NET
Můžete zavolat LoadWithPartialName
. Chcete-li například načíst sestavu pro rozhraní API Team Foundation Server, provedete příkaz
::LoadWithPartialName("Microsoft.TeamFoundation.Client")
Podívejte se také na Resolve-Assembly
z PSCX.
top
Spustit kód vytvořený za běhu
Příkaz Invoke-Expression
je obdobou příkazu eval
v jazyce Perl nebo JavaScript. Příkaz Invoke-Expression $str
spustí kód obsažený v řetězci $str
.
nahoru
Spustí program, který má v cestě mezeru
Okolo cesty dejte uvozovky a před ně přilepte ampersand. Například
& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"
spustí spustitelný program WinEdt.exe
, který má ve své úplné cestě dvě mezery.
Všimněte si, že ampersand nelze vynechat. Na rozdíl od cmd.exe
nepředpokládá prostředí PowerShell, že všechny řetězce jsou příkazy. Bez ampersandu je cesta s uvozovkami pouhým řetězcem.
top