Hej – mam nadzieję, że wszystko w porządku.
Chcę poświęcić kilka minut na rozpoczęcie pracy z PowerShell w sposób, który moim zdaniem jest mniej przytłaczający niż sposób, w jaki znalazłem większość materiałów PowerShell w tamtych czasach. Ponieważ powiedziałeś mi, że ciągle słyszysz o PowerShell i że nie możesz powiedzieć, jak się do tego dostać.
Pierwszą rzeczą, którą należy wiedzieć, jest to, że czuje się jak wiersz polecenia na sterydach, ale o wiele bardziej przydatny niż wiersz polecenia. Zobaczysz, o co mi chodzi, jak tylko go otworzysz. Zróbmy to, ale otwórzmy go za pomocą „Uruchom jako administrator”, ponieważ to tylko pomaga w przypadku niektórych wersji demonstracyjnych. W prawdziwym życiu otworzysz go tylko z prawami administratora, jeśli naprawdę tego potrzebujesz.
Kliknij przycisk Start i zacznij pisać PowerShell. Nie chcę, żebyś otwierał ISE (jeszcze), po prostu znajdź skrót „Windows PowerShell” i kliknij go prawym przyciskiem myszy, aby wybrać „Uruchom jako administrator”.
Teraz, gdy jest uruchomiony, przypnij go do paska zadań, aby następnym razem mieć do niego szybszy dostęp. Jeśli zamierzasz spróbować skorzystać z PowerShell, powinieneś ułatwić otwarcie.
W każdym razie to okno… od razu wydaje się, że musisz mieć wskazówkę, co napisać. Tak to prawda. Sprawy mogły być trochę łatwiejsze w ISE, a Aaron Nelson (@sqlvariant) powiedział mi, że nie używam ISE za każdym razem, gdy robię coś w PowerShell, ale tutaj będzie dobrze.
Zacznijmy od zrobienia kilku podstawowych rzeczy, które znamy z DOS-a. Polecenia cd
i katalog
. Spróbuj tego:
cd .. dir
Zobaczysz, że przenosisz się do C:\WINDOWS
, a następnie wypisz zawartość. Tutaj nie ma niespodzianek, jest jak wiersz polecenia. Lub DOS, jeśli jesteś wystarczająco dorosły.
Różnica w PowerShell polega na tym, że nie jest to tylko wyjście tekstowe. Te rzeczy są obiektami . I możemy z tym zrobić różne rzeczy. PowerShell to środowisko „wpisane”. Cały czas masz już do czynienia z obiektami, jak w Object Explorer w SSMS. Obiekty PowerShell mogą zawierać wszystkie te rzeczy, a także obiekty .Net. To stąd PowerShell czerpie swoją moc.
Kilka szybkich rzeczy…
- Polecenia PowerShell występują w parach czasownik-rzeczownik, na przykład
Set-Location
lubPobierz zawartość
lubGet-ChildItem
. Są one znane jako cmdlet, więc kiedy zobaczysz słowo „cmdlet”, oznacza to po prostu polecenie PowerShell. - Parametry poleceń programu PowerShell używają myślnika. Na przykład:
Get-ChildItem -Recurse
ale możesz też je skrócić, o ile nie ma niejasności. Więc mogę użyć-rec
zamiast-recurse
. - Zmienne zaczynają się od znaku dolara (
$
). Dojdziemy do tego później. - Nie używamy
w filtrach i testach używamy
-gt
.-eq
dla=
,-ne
dla!=
/<> ,
-le
dla<=
, i tak dalej. To frustrujące, ale przyzwyczaisz się do tego.- Istnieje wiele skrótów i aliasów. Jeden alias dla
Ustaw lokalizację
tocd
.Pobierz element podrzędny
jest również znany jakokatalog
ils
też.Gdzie-obiekt
to jest?
iForEach-Object
to%
. Zobaczymy je również w miarę postępów.- Dostajesz uzupełnianie tabulacji prawie we wszystkim, więc jeśli wpiszesz
Get-Chi
, możesz nacisnąć Tab i przełączać się między opcjami, aż znajdziesz to, czego szukasz.- Możesz użyć pomocy (która jest aliasem dla
Get-Help
) po prostu używając:help dir
, a na dole tej pomocy pojawi się miłe przypomnienie, że mogłeś użyćhelp dir -examples
i dodanie-online
otworzyłby stronę internetową z odpowiednią stroną pomocy (to naprawdę przydatne).- Możesz przekazać wyniki jednej rzeczy do drugiej za pomocą symbolu potoku (
|
). Być może najbardziej przydatnym jestgm
(alias dlaGet-Member
), która wyświetli listę właściwości i metod (członków) dla dowolnego przekazanego obiektu.#
skomentuje linię lub przejdzie między<#
i#>
- Istnieje wiele skrótów i aliasów. Jeden alias dla
Zobaczmy niektóre z tego w akcji.
Tutaj możemy zobaczyć kilka ciekawych rzeczy. Dobrze zauważyć, że możemy użyć -Exclude
i -Uwzględnij
. Zrobimy to wkrótce. Możemy uzyskać więcej informacji za pomocą -detailed
lub -przykłady
lub -full
.
Przyjrzyjmy się naszemu folderowi SQL. Zacznij od wpisania cd \p
a następnie naciśnij
Teraz naciśnij M i zacznij ponownie naciskać Tab, aby znaleźć „Microsoft SQL Server”. Jeśli zajdziesz za daleko, naciśnij klawisze Shift-Tab, aby cofnąć się. (Och, a jeśli powinieneś był patrzeć na D:
, a następnie zacznij ponownie od cd D:\p
– ale zasady są takie same.)
Świetny. Wciśnijmy Enter i zobaczmy, że zmieniliśmy katalog.
Ale teraz wpiszmy:dir -rec -inc ConfigurationFile.ini
Możesz nacisnąć Tab po każdym parametrze i zobaczyć, jak rozwijają się do bardziej poprawnych wersji. Mogłeś użyć Get-ChildItem
być nieco bardziej rygorystycznym. Jednak tak naprawdę nie obchodzi mnie to. Po uruchomieniu zobaczysz listę niektórych plików. Nie wiem, ile dostaniesz. Każdy z nich wskazuje, że uruchomiono instalację programu SQL Server. Ale jako ekspert SQL wiesz o tym. Być może nie wiedziałeś, jak łatwo PowerShell może je dla Ciebie wyświetlić.
Ok. Mam nadzieję, że widzimy, jak to się przyda.
Teraz zróbmy coś z tym wyjściem. Chcę powiedzieć „z tymi plikami”, ale zajmijmy się danymi i pomyślmy o tym jako o zbiorze danych.
Załóżmy, że chcemy je policzyć. Mogłem przeglądać wyniki za pomocą pętli ForEach-Object
(ale użyję skrótu %
) i zwiększ skonfigurowaną przeze mnie zmienną. Jest to powszechny wzorzec pętli — ludzie umieszczają całe programy w tych nawiasach klamrowych, w wielu wierszach.
To załatwia sprawę, ale jestem pewien, że jest coś wbudowanego, co pozwala mi liczyć rzeczy.
Cóż, nigdy nie pamiętam, co to za polecenie, więc zapytajmy jednego z tych wymyślnych dostawców wyszukiwania w Internecie.
Nie chcę nawet otwierać tych stron. Chcę tylko zauważyć, że istnieje polecenie o nazwie Pomiar obiektu
. Wrzućmy do tego nasze wyniki. Naciśnij klawisz „strzałka w górę”, aby wrócić do poprzedniego polecenia.
To zajmuje chwilę, a potem szczęśliwie mówi nam, że są trzy.
Zajmuje to chwilę, ponieważ musi ponownie przeszukiwać pliki. A może przechowujemy gdzieś te wyniki?
Teraz nazywam te rzeczy nawiasami, ale Amerykanie nazywają je nawiasami. A to, co nazywacie nawiasami, ja nazywam nawiasami kwadratowymi. Są też nawiasy klamrowe, które nazywasz nawiasami klamrowymi. Postaram się nazywać nawiasy „nawiasami okrągłymi”, aby uniknąć nieporozumień, ale jeśli mówię o „nawiasie”, mam na myśli nawias.
Zamierzam zawinąć mój katalog
polecenie w nawiasach okrągłych i przypisz je do zmiennej.
Teraz mogę potoku $configfilelist
do obiektu pomiaru
i będzie bardziej responsywny, ponieważ zachowałem swoje wyniki.
Ale ponieważ $configfilelist
to tablica plików, mogę też spojrzeć na jej długość, aby zobaczyć, że są trzy elementy. To o wiele łatwiejsze. I mogę uzyskać dostęp do każdego z nich, używając nawiasów kwadratowych od 0 do 2.
To nie jest jeszcze coś przełomowego. Ale te pliki mówią nam kilka przydatnych rzeczy. Zróbmy Get-Member
polecenie na naszej tablicy.
Nie zniechęcaj się tym. Na górze widzimy, że mamy do czynienia z obiektami typu System.IO.FileInfo
. To jest rzecz .Net i stąd pochodzi moc. Widzimy, że możemy wywołać Delete
metody tych plików lub Kopiuj do
lub Odszyfruj
(jeśli zostały zaszyfrowane, ale nie są) i nie tylko. Na dole widzimy Właściwości.
To jest bardziej interesujące. Spójrzmy na LastWriteTime
. Ponieważ możemy być zainteresowani, kiedy to nastąpi.
Możemy użyć Select-Object
aby pokazać tylko niektóre właściwości.
Zgodnie z oczekiwaniami nic nie jest zapisywane w tych plikach, ponieważ instalacje zostały faktycznie wykonane. Ale co, jeśli chcę to przefiltrować, tylko do tych od określonego momentu?
Zamierzam użyć Get-Date
aby uzyskać aktualną datę i godzinę. Zapakuję to w okrągłe nawiasy i użyję jego AddYears
metodę znaleźć rok temu. W prawdziwym świecie chętniej używałbym AddDays
, ale chcę uzyskać pewne wyniki.
I zamierzam filtrować $configfilelist
przekazując do Where-Object
(poza tym, że użyję wygodnego skrótu, jakim jest znak zapytania). Mój filtr znajduje się w nawiasach klamrowych („nawiasy klamrowe”, prawda?), a wewnątrz tych nawiasów klamrowych odnoszę się do rzeczy w $configfilelist
używając $_
.
Więc mój filtr wygląda tak, mówiąc, że chcę wyświetlić listę tych, które mają LastWriteTime
większe niż (-gt
) rok wcześniej:
I mam tylko jeden plik. Przerażający.
Wszystko dobrze, ale teraz chcę wiedzieć, o co chodziło w tej instalacji. W tym celu musimy zajrzeć do pliku. Pobierz zawartość
jest naszym przyjacielem. Zacznijmy od użycia Get-Content
bezpośrednio do pliku. Łatwo będzie później podłączyć go do naszego właściwego polecenia.
Pobierz zawartość
faktycznie zwraca tablicę linii i ma naprawdę przydatne parametry, takie jak -TotalCount
który zatrzymuje się po określonej liczbie linii, lub -Tail
który dostaje wiersze na końcu pliku. Uwielbiam to, gdy mam do czynienia z dużymi plikami – to nie tak, że mogę je otworzyć w Notatniku.
Pozwól, że opowiem Ci o Wybierz ciąg też. To jak grep
z Uniksa – używasz go, aby uzyskać linie, które chcesz w pliku.
Ten wynik wydaje się być uciążliwy, ale pamiętaj, że jest to po prostu ciąg znaków reprezentujący obiekt. Jeśli przekażę moje polecenie do gm
(Pobierz członka
), zobaczysz, o co mi chodzi.
Więc teraz mogę powiedzieć, że mam dostęp do Ścieżki
pliku, Linia
, Numer Linii
itp., osobno.
Aby wyszukać wiele rzeczy, chcę przekazać tablicę parametrów do -Wzór
. Robię to, po prostu używając przecinka, aby odkryć, że była to instalacja usług Analysis Services.
Mam nadzieję, że zaczynasz dostrzegać moc tego.
Mogę to wszystko umieścić w jednej linii, używając:
dir -rec -inc ConfigurationFile.ini | ? {$_.LastWriteTime -gt (Get-Date).AddYears(-1)} | select-string -Pattern 'FEATURES=','ACTION=' | select-object Path, Line
(Przepraszam, prawdopodobnie będziesz musiał przewijać w bok, aby to wszystko zobaczyć – umieszczenie wszystkiego w jednej linii nie jest cnotą w HTML.)
Kiedy pracujesz nad rzeczami, które Ci się podobają, będziesz chciał przechowywać polecenia gdzieś na później (na przykład w uruchamianym pliku .ps1). W tym celu chcesz mieć świadomość Get-History
. Zawiera listę wszystkiego, co uruchomiłeś w tej sesji.
I fajną małą sztuczką jest to, że możesz użyć liczb ujemnych do podpięcia się do tablic z drugiego końca. Możesz to zrobić:
Ale zamiast go wyświetlać, prześlij go do clip
:
…co przenosi go do schowka.
Nie mam zamiaru iść z tym dalej, ale możesz iść dalej i dalej sam, badając rodzaje rzeczy, które mogą być interesujące w twojej pracy. Możesz zrzucić wyniki do plików za pomocą i dołączaj do plików za pomocą
>
.
Teraz rozważ polecenia takie jak:
Get-EventLog -LogName Application -After (Get-Date).AddHours(-1) -EntryType Error
…i wyobraź sobie, co możesz z tym zrobić.
Spróbuj wykonać:Import-Module SQLServer
Który następnie pozwala ci odejść:
cd SQLSERVER:
I przeglądaj środowisko SQL tak, jakby to był system plików.
Muszę przyznać, że rzadko używam PowerShell do eksploracji SQL w ten sposób. Ale fakt, że mogę, z pewnością daje mi wiele możliwości. Fakt, że mogę użyć PowerShell do stworzenia dokumentu Worda, tak jak robią to na https://learn-powershell.net/2014/12/31/beginning-with-powershell-and-word/, lub wysyłać e-maile zgodnie z opisem na https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage lub wywołaj usługi internetowe (w tym usługi Azure Machine Learning) zgodnie z opisem na stronie https://docs.microsoft .com/en-gb/powershell/module/Microsoft.PowerShell.Utility/Invoke-WebRequest oznacza, że przy odrobinie wyobraźni możesz użyć PowerShell do robienia wszystkiego, co chcesz. Uwielbiam używać Invoke-SqlCommand do pobierania danych z SQL, wepchnij je do Invoke-WebRequest
aby uzyskać wyniki z usługi Azure ML, a następnie odpowiednio odpowiedzieć. PowerShell sprawia, że jest to naprawdę proste.
Aha, i żeby uruchomić polecenia PowerShell na innych komputerach (co może być oczywiście całkiem przydatne), szybkie „wyszukiwanie w Internecie” pokazało mi tę przydatną stronę:https://www.howtogeek.com/117192/how-to -uruchom-polecenia-powershell-na-komputerach-zdalnych/
Możesz mieć listę komputerów w pliku i przeglądać ją w następujący sposób:
Wypróbuj kilka rzeczy. Znokautuj się. Zobacz, co wszyscy piszą na T-SQL we wtorek w tym miesiącu, prowadzone przez Roba Sewella (@sqldbawithbeard)
@rob_farley