Kuchařka prostředí PowerShell

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“
    • 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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.