sql >> Databáze >  >> RDS >> Database

Protože potřebujete znát PowerShell

Ahoj – doufám, že se máš dobře.

Chci vám věnovat pár minut, abych vám mohl začít s PowerShellem, a to způsobem, který je podle mě méně ohromující, než jak jsem tenkrát našel většinu materiálů PowerShell. Protože jste mi řekli, že stále slyšíte o PowerShellu a že nemůžete říct, jak se do něj dostat.

První věc, kterou je třeba vědět, je, že to vypadá jako příkazový řádek na steroidech, ale mnohem užitečnější než příkazový řádek. Uvidíte, co tím myslím, jakmile to otevřete. Udělejme to, ale otevřeme to pomocí ‚Spustit jako správce‘, protože to jen pomáhá u některých ukázek. V reálném životě jej otevřete pouze s právy správce, pokud to opravdu potřebujete.

Klikněte tedy na tlačítko start a začněte psát PowerShell. Nechci, abyste otevírali ISE (zatím), stačí najít zástupce „Windows PowerShell“ a kliknout na něj pravým tlačítkem myši a vybrat „Spustit jako správce“.

Nyní, když je spuštěn, připněte jej na hlavní panel, abyste k němu měli příště rychlejší přístup. Pokud se pokusíte přijmout PowerShell, měli byste usnadnit jeho otevření.

Každopádně to okno... hned to vypadá, jako byste potřebovali vědět, co napsat. Ano to je správně. V ISE to mohlo být o něco jednodušší a Aaron Nelson (@sqlvariant) mi řekl, že nepoužívám ISE pokaždé, když něco dělám v PowerShellu, ale tady budeme v pořádku.

Začněme tím, že uděláme několik základních věcí, které známe z DOSu. Příkazy cd a dir . Zkuste toto:

cd ..
dir

Uvidíte, že se přesunete nahoru do C:\WINDOWS a poté vypište obsah. Žádné překvapení, je to jako příkazový řádek. Nebo DOS, pokud jste dost staří.

Rozdíl oproti PowerShellu je v tom, že se nejedná pouze o textový výstup. Tyto věci jsou objekty . A s tím můžeme dělat věci. PowerShell je „typované“ prostředí. S objekty již pracujete neustále, jako v Object Explorer v SSMS. Objekty PowerShellu mohou zahrnovat všechny tyto věci, stejně jako objekty .Net. Odtud získává PowerShell svou sílu.

Pár rychlých věcí…

  1. Příkazy PowerShellu se vyskytují ve dvojicích sloveso-podstatné jméno, jako je Set-Location nebo Get-Content nebo Get-ChildItem . Tyto rutiny jsou známé jako rutiny, takže když uvidíte slovo „cmdlet“, znamená to pouze příkaz PowerShellu.
  2. Parametry příkazu PowerShell používají spojovník. Jako:Get-ChildItem -Recurse ale můžete je také zkrátit, pokud to není nejednoznačné. Takže bych mohl použít -rec místo -recurse .
  3. Proměnné začínají znakem dolaru ($ ). K tomu se dostaneme později.
  4. Nepoužíváme > ve filtrech a testech používáme -gt . -eq pro = , -ne pro != /<> , -le pro <= , a tak dále. Je to frustrující, ale zvyknete si.
  5. Existuje spousta zkratek a aliasů. Jeden alias pro Set-Location je cd . Get-ChildItem je také známý jako dir a ls také. Where-Object je ? a ForEach-Object je % . Uvidíme je za pochodu.
  6. Dostanete doplňování tabelátorů téměř u všeho, takže pokud jste zadali Get-Chi , můžete stisknout Tab a procházet možnosti, dokud nenajdete, co chcete.
  7. Můžete použít nápovědu (což je alias pro Get-Help ) jednoduše pomocí:help dir a ve spodní části této nápovědy dostanete pěkné připomenutí, že jste mohli použít help dir -examples a přidání -online by otevřeli webovou stránku s příslušnou stránkou nápovědy (to je opravdu užitečné).
  8. Výsledky jedné věci můžete předávat do druhé pomocí symbolu svislé čáry (| ). Snad nejužitečnější je gm (alias pro Get-Member ), který zobrazí vlastnosti a metody (členy) pro jakýkoli objekt, který jste předali.
  9. # okomentuje řádek nebo přejde mezi <# a #>

Podívejme se na některé z nich v akci.

Zde můžeme vidět některé zajímavé věci. Je dobré si všimnout, že bychom mohli použít -Exclude a -Include . Brzy to uděláme. Více informací bychom mohli získat pomocí -detailed , nebo -examples , nebo -full .

Pojďme prozkoumat naši složku SQL. Začněte zadáním cd \p a poté stiskněte Tab dokud se nezobrazí Program Files.

Nyní stiskněte M a začněte znovu klepat na Tab, abyste našli „Microsoft SQL Server“. Pokud zajdete příliš daleko, stiskněte Shift-Tab a přejděte zpět. (Aha, a pokud jste se měli podívat na D: , pak začněte znovu s cd D:\p – ale principy jsou stejné.)

Skvělý. Zmáčkneme Enter a uvidíme, že jsme změnili adresář.

Ale teď napišme:dir -rec -inc ConfigurationFile.ini

Po každém parametru jste mohli stisknout Tab a vidět, jak se rozšiřují do správnějších verzí. Mohli jste použít Get-ChildItem být trochu přísnější. Je mi to ale celkem jedno. Když to spustíte, uvidíte seznam některých souborů. nevím, kolik jich dostaneš. Každý z nich označuje, že jste spustili instalaci serveru SQL Server. Ale jako odborník na SQL to víte. Jen jste možná nevěděli, jak snadno vám je může PowerShell vypsat.

OK. Doufejme, že pro to uvidíme nějaké využití.

Nyní s tímto výstupem něco uděláme. Chci říct ‚s těmito soubory‘, ale pojďme udělat věc s daty a představme si to jako datovou sadu souborů.

Předpokládejme, že je chceme spočítat. Mohl bych procházet výsledky pomocí ForEach-Object (ale použiji zkratku % ) a inkrementovat proměnnou, kterou jsem nastavil. Toto je běžný vzorec pro opakování – lidé vkládají celé programy do těchto složených závorek přes mnoho řádků.

Tohle funguje, ale jsem si jistý, že je tam něco vestavěného, ​​co mi umožní věci počítat.

No, nikdy si nemůžu vzpomenout, co to bylo za příkaz, takže se zeptejme jednoho z těch skvělých poskytovatelů internetového vyhledávání.

Ani se mi nechce otevírat tyto stránky. Chci si jen všimnout, že existuje příkaz s názvem Measure-Object . Vložme do toho náš výstup. Stisknutím klávesy „šipka nahoru“ se vrátíte k předchozímu příkazu.

To chvíli trvá a pak nám šťastně řekne, že jsou tři.

Chvíli to trvá, protože je třeba znovu prohledávat soubory. Co kdybychom ty výsledky někam uložili?

Nyní těmto věcem říkám závorky, ale Američané jim říkají závorky. A čemu vy říkáte závorky, já říkám hranaté závorky. Existují také složené závorky, kterým podle mě říkáte závorky. Pokusím se nazvat závorky „kulatými závorkami“, aby nedošlo k záměně, ale pokud mluvím o „závorce“, mám na mysli závorku.

Zabalím svůj dir příkaz v kulatých závorkách a přiřaďte jej k proměnné.

Nyní mohu kanál $configfilelist do Measure-Object a bude lépe reagovat, protože jsem si uložil své výsledky.

Ale protože $configfilelist je pole souborů, mohu se také podívat na jeho délku, abych zjistil, že existují tři položky. To je mnohem jednodušší. A ke každému z nich mám přístup pomocí hranatých závorek od 0 do 2.

Tohle ještě není úplně převratná věc. Ale tyto soubory nám říkají některé užitečné věci. Pojďme udělat Get-Member příkaz na našem poli.

Nenechte se tím odradit. Nahoře můžeme vidět, že máme co do činění s objekty typu System.IO.FileInfo . Toto je věc .Net a odtud pochází síla. Vidíme, že bychom mohli zavolat Delete metody těchto souborů nebo CopyTo nebo Decrypt (pokud byly zašifrovány, ale nejsou) a další. Dole vidíme Vlastnosti.

Tohle je zajímavější. Podívejme se na LastWriteTime . Protože by nás mohlo zajímat, kdy to bude.

Můžeme použít Select-Object ukázat pouze určité vlastnosti.

Podle očekávání se do těchto souborů nic nezapisuje, protože instalace byly skutečně provedeny. Ale co kdybych to chtěl filtrovat, pouze na jedničky od určitého okamžiku?

Budu používat Get-Date abyste získali aktuální datum a čas. Zabalím to do kulatých závorek a použiji jeho AddYears metoda k nalezení před rokem. V reálném světě bych se více přikláněl k použití AddDays , ale chci získat nějaké výsledky.

A budu filtrovat $configfilelist předáním do Where-Object (kromě toho, že použiji pohodlnou zkratku, kterou je otazník). Můj filtr žije ve složených závorkách („složené závorky“, že?) a uvnitř těchto složených závorek odkazuji na věci v $configfilelist pomocí $_ .

Můj filtr tedy vypadá takto a říkám, že chci uvést ty, které mají LastWriteTime větší než (-gt ) před rokem:

A mám jen jeden soubor. Úžasný.

To je všechno v pořádku, ale teď chci vědět, o čem ta instalace byla. K tomu se musíme podívat do souboru. Get-Content je tady náš přítel. Začněme pomocí Get-Content přímo proti souboru. Později to bude snadné připojit k našemu správnému příkazu.

Get-Content ve skutečnosti vrací pole řádků a má opravdu užitečné parametry jako -TotalCount který se zastaví po určitém počtu řádků nebo -Tail který dostane řádky na konec souboru. Líbí se mi to, když se zabývám velkými soubory – není to tak, že bych je mohl otevřít v poznámkovém bloku.

Řeknu vám o Select-String také. Je to jako grep z Unixu – použijete jej k získání řádků, které chcete do souboru.

Tento výstup vypadá jako bolest, ale pamatujte, že se jedná pouze o řetězcovou reprezentaci objektu. Pokud zadám svůj příkaz potrubím do gm (Get-Member ), uvidíte, co tím myslím.

Takže teď můžu říct, že mám přístup k Path souboru, Line , LineNumber atd., samostatně.

Abych hledal více věcí, chci předat pole parametrů -Pattern . Dělám to jednoduše pomocí čárky, abych zjistil, že šlo o instalaci Analysis Services.

Doufám, že začínáte vidět sílu tohoto.

Mohu to vše umístit na jeden řádek pomocí:

dir -rec -inc ConfigurationFile.ini | ? {$_.LastWriteTime -gt (Get-Date).AddYears(-1)} | select-string -Pattern 'FEATURES=','ACTION=' | select-object Path, Line

(Je nám líto, ale pravděpodobně budete muset posunout stránku, abyste to viděli – dostat vše na jeden řádek není v HTML zrovna ctnost.)

Když pracujete na věcech, které se vám líbí, budete chtít příkazy někde uložit na později (například do souboru .ps1, který spustíte). Chcete-li to provést, měli byste vědět o Get-History . Uvádí vše, co jste v této relaci spustili.

A úhledný malý trik je, že můžete použít záporná čísla k připojení do polí z druhého konce. Takže můžete udělat toto:

Ale místo toho, abyste to jen zobrazovali, vložte to do clip :

…který to dostane do schránky.

Nebudu v tom zacházet o moc dál, ale můžete to sami posouvat dál a dál a zkoumat typy věcí, které by mohly být na vaší práci zajímavé. Výsledky můžete uložit do souborů pomocí > a připojit k souborům pomocí >> .

Nyní zvažte příkazy jako:

Get-EventLog -LogName Application -After (Get-Date).AddHours(-1) -EntryType Error

...a představte si, co byste s tím mohli dělat.

Zkuste udělat:Import-Module SQLServer

Což vás pak pustí:

cd SQLSERVER:

A procházejte prostředí SQL, jako by to byl souborový systém.

Musím přiznat, že nemám tendenci používat PowerShell k takovému zkoumání SQL velmi často. Ale skutečnost, že mohu, mi jistě dává spoustu možností. Skutečnost, že bych mohl použít PowerShell k vytvoření dokumentu aplikace Word, jako to dělají na https://learn-powershell.net/2014/12/31/beginning-with-powershell-and-word/, nebo posílat e-maily, jak je popsáno na https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage nebo zavolejte webové služby (včetně služeb Azure Machine Learning), jak je popsáno na https://docs.microsoft .com/en-gb/powershell/module/Microsoft.PowerShell.Utility/Invoke-WebRequest znamená, že s trochou představivosti můžete použít PowerShell k tomu, co chcete. Rád používám Invoke-SqlCommand k získání dat z SQL a jejich vložení do Invoke-WebRequest získat skóre z Azure ML a poté odpovídajícím způsobem reagovat. PowerShell to dělá opravdu přímočarým.

Jo, a pro spouštění příkazů PowerShellu na jiných strojích (což může být samozřejmě docela užitečné), rychlé „vyhledávání na internetu“ mi ukázalo tuto užitečně vypadající stránku:https://www.howtogeek.com/117192/how-to -run-powershell-commands-on-remote-computers/

V souboru můžete mít seznam počítačů a procházet jej takto:

Zkuste nějaké věci. Oklepejte se. A prozkoumejte, co všichni píší pro T-SQL úterý tento měsíc, pořádané Robem Sewellem (@sqldbawithbeard)

@rob_farley


  1. V klauzuli ON CONFLICT použijte více konfliktů_cíl

  2. PostgreSQL - jak vykreslit datum v jiném časovém pásmu?

  3. Návod Jak zálohovat a obnovovat (exportovat a importovat) databáze MySQL

  4. Vyhoďte chybu bránící aktualizaci tabulky ve spouštěči MySQL