Database
 sql >> база данни >  >> RDS >> Database

Защото трябва да познавате PowerShell

Хей - надявам се, че се справяш добре.

Искам да отделя няколко минути, за да ви накарам да започнете с PowerShell, по начин, който според мен е по-малко завладяващ от начина, по който намерих повечето материали за PowerShell през деня. Защото ми казахте, че продължавате да слушате за PowerShell и че не можете да кажете как да влезете в него.

Първото нещо, което трябва да знаете, е, че изглежда като команден ред на стероиди, но много по-полезен от командния ред. Ще разберете какво имам предвид веднага щом го отворите. Нека го направим, но нека го отворим с помощта на „Изпълни като администратор“, защото това само помага за някои от демонстрациите. В реалния живот ще го отворите само с права на администратор, ако наистина трябва.

Така че щракнете върху бутона за стартиране и започнете да пишете PowerShell. Не искам да отваряте ISE (все още), просто намерете прекия път „Windows PowerShell“ и щракнете с десния бутон върху него, за да изберете „Изпълни като администратор“.

Сега, когато работи, закрепете го към лентата на задачите си, за да можете да получите по-бърз достъп до него следващия път. Ако ще се опитате да прегърнете PowerShell, трябва да улесните отварянето му.

Както и да е, този прозорец... веднага се усеща, че трябва да имате представа какво да напишете. Да, така е. Нещата може да са били малко по-лесни в ISE и Аарон Нелсън (@sqlvariant) ми каза, че не използвам ISE всеки път, когато правя нещо в PowerShell, но тук ще се оправим.

Нека започнем, като направим някои основни неща, които знаем от DOS. Командите cd и dir . Опитайте това:

cd ..
dir

Ще видите, че се придвижвате нагоре до C:\WINDOWS и след това избройте съдържанието. Тук няма изненади, това е точно като командния ред. Или DOS, ако сте достатъчно възрастни.

Разликата с PowerShell е, че това не е просто извеждане на текст. Тези неща са обекти . И можем да правим неща с това. PowerShell е „въведена“ среда. Вече работите с обекти през цялото време, като в Object Explorer в SSMS. Обектите на PowerShell могат да включват всички тези неща, както и .Net обекти. Това е мястото, където PowerShell получава силата си.

Няколко бързи неща...

  1. Командите на PowerShell се предлагат в двойки глагол-съществително, като Set-Location или Get-Content или Get-ChildItem . Те са известни като командлета, така че когато видите думата „cmdlet“, това просто означава команда PowerShell.
  2. Параметрите на командата на PowerShell използват тире. Като:Get-ChildItem -Recurse но можете също да ги съкращавате, стига да няма неяснота. Така че мога да използвам -rec вместо -recurse .
  3. Променливите започват със знак за долар ($ ). Ще стигнем до това по-късно.
  4. Не използваме > във филтрите и тестовете използваме -gt . -eq за = , -ne за != /<> , -le за <= , и така нататък. Това е разочароващо, но ще свикнете.
  5. Има куп съкращения и псевдоними. Един псевдоним за Set-Location е cd . Get-ChildItem е известен също като dir и ls също. Къде-обект е ? и ForEach-Object е % . Ще видим и тези, докато вървим напред.
  6. Получавате завършване на раздели за почти всичко, така че ако сте написали Get-Chi , можете да натиснете Tab и да преминете през опциите, докато намерите това, което искате.
  7. Можете да използвате помощ (която е псевдоним за Get-Help ), като просто използвате:help dir , а в долната част на тази помощ ще получите хубаво напомняне, че бихте могли да използвате help dir -examples , и това добавяне на -online би отворил уеб страница със съответната помощна страница на нея (това е наистина удобно).
  8. Можете да прехвърлите резултатите от едно нещо в друго, като използвате символа с тръба (| ). Може би най-полезният е gm (псевдоним за Get-Member ), който ще изброи свойствата и методите (членовете) за всеки обект, в който сте прехвърлили.
  9. # ще коментира реда или ще премине между <# и #>

Нека видим част от това в действие.

Тук можем да видим някои интересни неща. Добре е да забележим, че можем да използваме -Exclude и -Include . Ще го направим скоро. Можем да получим повече информация с помощта на -detailed , или -примери , или -full .

Нека разгледаме нашата папка SQL. Започнете, като напишете cd \p и след това натиснете Tab докато не ви покаже Program Files.

Сега натиснете M и започнете да натискате Tab отново, за да намерите „Microsoft SQL Server“. Ако отидете твърде далеч, натиснете Shift-Tab, за да се върнете назад. (О, и ако трябваше да търсите D: , след което започнете отново с cd D:\p – но принципите са едни и същи.)

Страхотен. Нека да натиснем Enter и да видим, че сме променили директорията.

Но сега нека напишем:dir -rec -inc ConfigurationFile.ini

Бихте могли да натиснете Tab след всеки параметър и да видите как се разширяват в по-правилните версии. Бихте могли да използвате Get-ChildItem да бъде малко по-строг. все пак не ми пука. Когато стартирате това, ще видите някои файлове изброени. не знам колко ще получиш. Всеки от тях показва, че сте стартирали инсталация на SQL Server. Но като експерт по SQL, вие знаете това. Може би просто не сте знаели колко лесно PowerShell може да ги изброи вместо вас.

Добре. Надяваме се, че виждаме някаква полза от това.

Сега нека направим нещо с този изход. Искам да кажа „с тези файлове“, но нека направим нещо с данните и да мислим за това като набор от данни от файлове.

Да предположим, че искаме да ги преброим. Мога да преглеждам резултатите с помощта на ForEach-Object (но ще използвам прекия път % ) и увеличете променлива, която настроих. Това е често срещан модел за цикъл – хората поставят цели програми в тези къдрави скоби, на много редове.

Това върши работа, но съм сигурен, че има нещо вградено, което да ми позволи да преброя нещата.

Е, никога не мога да си спомня каква е тази команда, така че нека попитаме някой от тези луксозни доставчици на интернет търсене.

Дори не искам да отварям тези страници. Искам само да отбележа, че има команда, наречена Measure-Object . Нека насочим нашия изход към това. Натиснете клавиша „стрелка нагоре“, за да се върнете към предишна команда.

Това отнема момент и след това щастливо ни казва, че има три.

Отнема малко време, защото трябва да търси отново във файловете. Какво ще кажете да съхраняваме тези резултати някъде?

Сега аз наричам тези неща скоби, но американците ги наричат ​​скоби. И това, което вие наричате скоби, аз наричам квадратни скоби. Има и къдрави скоби, които според мен наричате скоби. Ще се опитам да нарека скоби „кръгли скоби“, за да избегна объркване, но ако се позова на „скоба“, имам предвид скоби.

Ще увия моя dir команда в кръгли скоби и я присвоете на променлива.

Сега мога да въвеждам $configfilelist в Measure-Object и ще бъде по-отзивчив, защото запазих резултатите си.

Но тъй като $configfilelist е масив от файлове, мога също да погледна дължината му, за да видя, че има три елемента. Това е много по-лесно. И имам достъп до всеки отделен, като използвам квадратни скоби от 0 до 2.

Това все още не е точно революционно нещо. Но тези файлове ни казват някои полезни неща. Нека направим Get-Member команда в нашия масив.

Не се отчайвайте от това. В горната част можем да видим, че имаме работа с обекти от тип System.IO.FileInfo . Това е нещо .Net и откъде идва силата. Можем да видим, че можем да извикаме Delete методи на тези файлове или CopyTo , или Декриптиране (ако са били криптирани, но не са) и още. Долу виждаме свойства.

Това е по-интересно. Нека да разгледаме LastWriteTime . Защото може да се интересуваме кога е това.

Можем да използваме Select-Object да показва само определени свойства.

Както се очакваше, нищо не е записано в тези файлове, тъй като инсталирането действително е извършено. Но какво ще стане, ако искам да филтрирам това, само до такива от определен момент във времето?

Ще използвам Get-Date за да получите текущата дата и час. Ще увия това в кръгли скоби и ще използвам неговите AddYears метод за намиране преди година. В реалния свят бих бил по-склонен да използвам AddDays , но искам да получа някакви резултати.

И ще филтрирам $configfilelist чрез преминаване в Where-Object (освен че ще използвам удобен пряк път, който е въпросителният знак). Филтърът ми живее в къдрави скоби („скоби“, нали?), а вътре в тези къдрави скоби се позовавам на нещата в $configfilelist използвайки $_ .

Така че моят филтър е така, казвайки, че искам да изброя тези, които имат LastWriteTime по-голямо от (-gt ) година преди това:

И получавам само един файл. Страхотно.

Всичко това е добре, но сега искам да знам за какво беше тази инсталация. За това трябва да погледнем във файла. Get-Content е наш приятел тук. Нека започнем с помощта на Get-Content директно срещу файл. Ще бъде лесно да го включим в нашата правилна команда по-късно.

Get-Content всъщност връща масив от редове и има наистина полезни параметри като -TotalCount който спира след определен брой редове или -Tail който получава редове в края на файла. Обичам това, когато се занимавам с големи файлове - не е като да ги отворя в Notepad.

Нека ви разкажа за Изберете-String също. Това е като grep от Unix – използвате го, за да получите редовете, които искате във файл.

Този изход изглежда като болка, но не забравяйте, че това е само низовото представяне на обект. Ако препратя моята команда в gm (Вземете член ), ще видите какво имам предвид.

Така че сега мога да кажа, че имам достъп до Path на файла, Реда , LineNumber и др., отделно.

За да търся множество неща, искам да предам масив от параметри на -Pattern . Правя това, като просто използвам запетая, за да открия, че това е инсталиране на Analysis Services.

Надяваме се, че започвате да виждате силата на това.

Мога да сложа всичко в един ред, като използвам:

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

(За съжаление, най-вероятно ще трябва да превъртите настрани, за да видите всичко това – получаването на всичко на един ред не е точно добродетел в HTML.)

Когато работите по нещата, които харесвате, ще искате да съхраните командите някъде за по-късно (като например във файл .ps1, който изпълнявате). За това искате да сте наясно с Get-History . Той изброява всичко, което сте стартирали в тази сесия.

И чист малък трик е, че можете да използвате отрицателни числа, за да закачите в масиви от другия край. Така че можете да направите това:

Но вместо просто да го показвате, го направете в clip :

...което го поставя в клипборда.

Няма да продължа много по-далеч с това, но вие можете сами да продължите да прокарвате това все повече и повече, като изследвате видовете неща, които може да са интересни в работата ви. Можете да изсипете резултатите във файлове с помощта на > и добавете към файлове с помощта на >> .

Сега помислете за команди като:

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

...и си представете какво бихте могли да направите с това.

Опитайте да направите:Import-Module SQLServer

Което след това ви пуска:

cd SQLSERVER:

И разглеждайте SQL средата, сякаш е файлова система.

Трябва да призная, че не съм склонен да използвам PowerShell, за да изследвам SQL по този начин. Но фактът, че мога, със сигурност ми дава куп възможности. Фактът, че мога да използвам PowerShell, за да създам документ на Word, както го правят на https://learn-powershell.net/2014/12/31/beginning-with-powershell-and-word/, или да изпращам имейли, както е описано на https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage или се обадете на уеб услуги (включително Azure Machine Learning), както е описано на https://docs.microsoft .com/en-gb/powershell/module/Microsoft.PowerShell.Utility/Invoke-WebRequest означава, че с малко въображение можете да използвате PowerShell, за да правите почти всичко, което искате. Обичам да използвам Invoke-SqlCommand, за да извличам данни от SQL, натискам ги в Invoke-WebRequest за да получите резултати от Azure ML и след това да отговорите съответно. PowerShell го прави наистина лесен.

О, и за да изпълнявам команди на PowerShell на други машини (което може да бъде доста полезно, разбира се), едно бързо „търсене в интернет“ ми показа тази полезна страница:https://www.howtogeek.com/117192/how-to -run-powershell-commands-on-remote-computers/

Можете да имате списък с компютри във файл и да го прегледате по следния начин:

Опитайте някои неща. Нокаутирай се. И проучете какво пишат всички за T-SQL във вторник този месец, домакин на Роб Сюел (@sqldbawithbeard)

@rob_farley


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Присъединете се към 3 таблици в SQL

  2. Коя функция за маскиране на данни трябва да използвам?

  3. Множество начини за изтриване на дубликати от SQL таблици

  4. Преминете към стартиране на разработване на база данни, управлявано от тестове (TDDD)

  5. SQL Views:Как да работим с Views в SQL?