Hei – semoga kamu baik-baik saja.
Saya ingin meluangkan beberapa menit untuk membantu Anda memulai PowerShell, dengan cara yang menurut saya tidak terlalu berlebihan dibandingkan dengan cara saya menemukan sebagian besar materi PowerShell di masa lalu. Karena Anda telah memberi tahu saya bahwa Anda terus mendengar tentang PowerShell, dan Anda tidak tahu cara masuk ke dalamnya.
Hal pertama yang perlu diketahui adalah rasanya seperti Command Prompt pada steroid, tetapi jauh lebih berguna daripada Command Prompt. Anda akan melihat apa yang saya maksud segera setelah Anda membukanya. Mari kita lakukan itu, tetapi mari kita buka menggunakan 'Run as Administrator', karena itu hanya membantu untuk beberapa demo. Dalam kehidupan nyata, Anda hanya akan membukanya dengan hak Admin jika Anda benar-benar membutuhkannya.
Jadi klik tombol mulai dan mulailah mengetik PowerShell. Saya tidak ingin Anda membuka ISE (belum), cukup temukan pintasan "Windows PowerShell", dan klik kanan padanya untuk memilih 'Jalankan sebagai Administrator'.
Sekarang setelah berjalan, sematkan ke Taskbar Anda, sehingga Anda dapat mengaksesnya lebih cepat di lain waktu. Jika Anda akan mencoba merangkul PowerShell, Anda harus membuatnya mudah untuk dibuka.
Bagaimanapun, jendela itu… langsung terasa seperti Anda harus memiliki petunjuk apa yang harus ditulis. Ya itu betul. Segalanya mungkin sedikit lebih mudah di ISE, dan Aaron Nelson (@sqlvariant) telah memberi tahu saya untuk tidak menggunakan ISE setiap kali saya melakukan apa pun di PowerShell, tetapi kami akan baik-baik saja di sini.
Mari kita mulai dengan melakukan beberapa hal dasar yang kita ketahui dari DOS. Perintah cd
dan dir
. Coba ini:
cd .. dir
Anda akan melihat bahwa Anda pindah ke C:\WINDOWS
, lalu buat daftar isinya. Tidak ada kejutan di sini, ini seperti Command Prompt. Atau DOS jika Anda cukup umur.
Perbedaannya dengan PowerShell adalah bahwa ini bukan hanya keluaran teks. Benda-benda ini adalah objek . Dan kita bisa melakukan banyak hal dengan itu. PowerShell adalah lingkungan 'diketik'. Anda sudah berurusan dengan objek sepanjang waktu, seperti di Object Explorer di SSMS. Objek PowerShell dapat mencakup semua hal itu, serta objek .Net. Dari sinilah PowerShell mendapatkan kekuatannya.
Beberapa hal cepat…
- Perintah PowerShell datang dalam pasangan kata kerja-kata benda, seperti
Set-Location
atauGet-Content
atauGet-ChildItem
. Ini dikenal sebagai cmdlet, jadi ketika Anda melihat kata 'cmdlet', itu hanya berarti perintah PowerShell. - Parameter perintah PowerShell menggunakan tanda hubung. Seperti:
Get-ChildItem -Recurse
tetapi Anda juga dapat menyingkatnya selama tidak ada ambiguitas. Jadi saya bisa menggunakan-rec
bukannya-recurse
. - Variabel dimulai dengan tanda dolar (
$
). Kami akan membahas ini nanti. - Kami tidak menggunakan
>
dalam filter dan pengujian, kami menggunakan-gt
.-eq
untuk=
,-ne
untuk!=
/<>
,-le
untuk<>
, dan seterusnya. Ini membuat frustrasi, tetapi Anda akan terbiasa. - Ada banyak singkatan dan alias. Satu alias untuk
Set-Location
adalahcd
.Get-ChildItem
juga dikenal sebagaidir
, danls
juga.Where-Object
apakah?
danForEach-Object
adalah%
. Kita akan melihat ini saat kita berjalan juga. - Anda mendapatkan penyelesaian tab di hampir semua hal, jadi jika Anda mengetik
Get-Chi
, Anda dapat menekan Tab dan menelusuri opsi hingga Anda menemukan yang Anda inginkan. - Anda dapat menggunakan bantuan (yang merupakan alias untuk
Get-Help
) hanya dengan menggunakan:help dir
, dan di bagian bawah bantuan itu, Anda akan mendapatkan pengingat yang bagus bahwa Anda dapat menggunakanhelp dir -examples
, dan menambahkan-online
akan membuka halaman web dengan halaman bantuan yang relevan di dalamnya (itu sangat berguna). - Anda dapat meneruskan hasil dari satu hal ke hal lain menggunakan simbol pipa (
|
). Mungkin yang paling berguna adalahgm
(alias untukGet-Member
), yang akan mencantumkan Properti dan Metode (anggota) untuk objek apa pun yang telah Anda lewati. #
akan mengomentari baris, atau pergi di antara<#
dan#>
Mari kita lihat beberapa tindakan ini.
Di sini kita bisa melihat beberapa hal menarik. Baik untuk diperhatikan bahwa kita dapat menggunakan -Exclude
dan -Include
. Kami akan segera melakukannya. Kami dapat memperoleh informasi lebih lanjut menggunakan -detailed
, atau -examples
, atau -full
.
Mari kita jelajahi folder SQL kita. Mulailah dengan mengetik cd \p
lalu tekan
Sekarang tekan M dan mulai tekan Tab lagi untuk menemukan 'Microsoft SQL Server'. Jika Anda melangkah terlalu jauh, tekan Shift-Tab untuk mundur. (Oh, dan jika Anda seharusnya mencari di D:
, lalu mulai lagi dengan cd D:\p
– tapi prinsipnya sama.)
Besar. Mari kita tekan Enter dan lihat bahwa kita telah mengubah direktori.
Tapi sekarang mari kita ketik:dir -rec -inc ConfigurationFile.ini
Anda bisa menekan Tab setelah setiap parameter dan melihatnya berkembang ke versi yang lebih benar. Anda bisa menggunakan Get-ChildItem
menjadi sedikit lebih ketat. Aku tidak terlalu peduli. Saat Anda menjalankan ini, Anda akan melihat beberapa file terdaftar. Saya tidak tahu berapa banyak yang akan Anda dapatkan. Masing-masing menunjukkan bahwa Anda menjalankan penginstalan SQL Server. Tetapi sebagai ahli SQL, Anda tahu ini. Anda mungkin tidak tahu betapa mudahnya PowerShell dapat mencantumkannya untuk Anda.
Oke. Mudah-mudahan kita melihat beberapa kegunaan untuk ini.
Sekarang mari kita lakukan sesuatu dengan output ini. Saya ingin mengatakan 'dengan file-file ini', tetapi mari kita lakukan hal data dan anggap ini sebagai kumpulan data file.
Misalkan kita ingin menghitungnya. Saya bisa mengulang hasil menggunakan ForEach-Object
(tapi saya akan menggunakan pintasan %
), dan menambah variabel yang saya atur. Ini adalah pola umum untuk perulangan – orang meletakkan seluruh program di dalam kurung kurawal itu, melintasi banyak baris.
Ini berhasil, tetapi saya yakin ada sesuatu yang ada di dalamnya untuk memungkinkan saya menghitung banyak hal.
Yah, saya tidak pernah ingat apa perintah itu, jadi mari kita tanyakan salah satu penyedia pencarian internet yang mewah itu.
Saya bahkan tidak ingin membuka halaman ini. Saya hanya ingin memperhatikan bahwa ada perintah yang disebut Measure-Object
. Mari menyalurkan output kita ke dalamnya. Tekan tombol 'panah atas' untuk kembali ke perintah sebelumnya.
Ini membutuhkan beberapa saat, dan kemudian dengan senang hati memberi tahu kita bahwa ada tiga.
Butuh beberapa saat karena harus mencari file lagi. Bagaimana kalau kita menyimpan hasil itu di suatu tempat?
Sekarang, saya menyebutnya tanda kurung, tetapi orang Amerika menyebutnya tanda kurung. Dan apa yang Anda sebut tanda kurung, saya sebut tanda kurung siku. Ada juga kurung kurawal, yang menurut saya Anda sebut kurung kurawal. Saya akan mencoba menyebut tanda kurung 'kurung bulat' untuk menghindari kebingungan, tetapi jika saya merujuk ke 'kurung', yang saya maksud adalah tanda kurung.
Saya akan membungkus dir
saya perintah dalam tanda kurung bulat, dan tetapkan itu ke variabel.
Sekarang saya dapat mem-pipe $configfilelist
ke dalam Measure-Object
dan itu akan lebih responsif, karena saya telah menyimpan hasil saya.
Tapi karena $configfilelist
adalah array file, saya juga dapat melihat panjangnya untuk melihat bahwa ada tiga item. Itu jauh lebih mudah. Dan saya dapat mengakses masing-masing individu dengan menggunakan tanda kurung siku dari 0 hingga 2.
Ini belum benar-benar hal yang inovatif. Tetapi file-file itu memberi tahu kami beberapa hal yang berguna. Ayo lakukan Get-Member
perintah pada array kami.
Jangan ditunda oleh ini. Di bagian atas kita dapat melihat bahwa kita sedang berhadapan dengan objek yang bertipe System.IO.FileInfo
. Ini adalah hal .Net dan dari situlah kekuatan berasal. Kita dapat melihat bahwa kita dapat memanggil Delete
metode file ini, atau CopyTo
, atau Decrypt
(jika dienkripsi, tetapi tidak), dan banyak lagi. Di bagian bawah kita melihat Properties.
Ini lebih menarik. Mari kita lihat LastWriteTime
. Karena kita mungkin tertarik pada saat itu.
Kita dapat menggunakan Select-Object
untuk menunjukkan hanya properti tertentu.
Seperti yang diharapkan, tidak ada yang ditulis ke file-file itu sejak penginstalan benar-benar selesai. Tetapi bagaimana jika saya ingin memfilter ini, hanya untuk yang sejak titik waktu tertentu?
Saya akan menggunakan Get-Date
untuk mendapatkan tanggal dan waktu saat ini. Saya akan membungkusnya dalam tanda kurung bulat dan menggunakan AddYears
metode untuk menemukan setahun yang lalu. Di dunia nyata saya akan lebih cenderung menggunakan AddDays
, tapi saya ingin mendapatkan beberapa hasil.
Dan saya akan memfilter $configfilelist
dengan meneruskan ke Where-Object
(kecuali bahwa saya akan menggunakan jalan pintas yang nyaman yang merupakan tanda tanya). Filter saya berada di dalam kurung kurawal ('kawat gigi', kan?), dan di dalam kurung kurawal itu saya merujuk ke hal-hal di $configfilelist
menggunakan $_
.
Jadi filter saya seperti ini, mengatakan bahwa saya ingin membuat daftar yang memiliki LastWriteTime
lebih besar dari (-gt
) setahun sebelumnya:
Dan saya hanya mendapatkan satu file. Hebat.
Itu semua baik dan bagus, tetapi sekarang saya ingin tahu tentang apa instalasi itu. Untuk itu kita perlu melihat ke dalam file. Get-Content
adalah teman kita di sini. Mari kita mulai dengan menggunakan Get-Content
terhadap file secara langsung. Akan mudah untuk menghubungkannya ke perintah kita yang tepat nanti.
Get-Content
sebenarnya mengembalikan larik baris, dan memiliki parameter yang sangat berguna seperti -TotalCount
yang berhenti setelah sejumlah baris tertentu, atau -Tail
yang mendapat baris di akhir file. Saya suka ini ketika saya berurusan dengan file besar – saya tidak bisa membukanya di Notepad.
Biarkan saya memberi tahu Anda tentang Pilih-String juga. Ini seperti grep
dari Unix - Anda menggunakannya untuk mendapatkan baris yang Anda inginkan dalam file.
Output itu sepertinya menyebalkan, tapi ingat ini hanya representasi string dari suatu objek. Jika saya menyalurkan perintah saya ke gm
(Get-Member
), Anda akan mengerti maksud saya.
Jadi sekarang saya tahu bahwa saya dapat mengakses Path
dari file, Line
, LineNumber
, dll., secara terpisah.
Untuk mencari banyak hal, saya ingin meneruskan array parameter ke -Pattern
. Saya melakukannya hanya dengan menggunakan koma, untuk mengetahui bahwa itu adalah instalasi Layanan Analisis.
Semoga Anda mulai melihat kekuatan ini.
Saya dapat memasukkan semuanya ke dalam satu baris dengan menggunakan:
dir -rec -inc ConfigurationFile.ini | ? {$_.LastWriteTime -gt (Get-Date).AddYears(-1)} | select-string -Pattern 'FEATURES=','ACTION=' | select-object Path, Line
(Maaf, Anda mungkin harus menggulir ke samping untuk melihat semua itu – mendapatkan semuanya dalam satu baris bukanlah hal yang baik dalam HTML.)
Saat Anda mengerjakan hal-hal yang Anda suka, Anda akan ingin menyimpan perintah di suatu tempat untuk nanti (seperti dalam file .ps1 yang Anda jalankan). Untuk itu, Anda ingin mengetahui Get-History
. Ini mencantumkan semua yang Anda jalankan di sesi itu.
Dan trik kecil yang rapi adalah Anda dapat menggunakan angka negatif untuk menghubungkan ke array dari ujung yang lain. Jadi Anda bisa melakukan ini:
Tapi alih-alih hanya menampilkannya, masukkan ke clip
:
... yang membawanya ke clipboard.
Saya tidak akan melangkah lebih jauh dengan ini, tetapi Anda dapat terus mendorong ini lebih jauh dan lebih jauh, menjelajahi jenis hal yang mungkin menarik dalam pekerjaan Anda. Anda dapat membuang hasil ke dalam file menggunakan >
dan tambahkan ke file menggunakan >>
.
Sekarang pertimbangkan perintah seperti:
Get-EventLog -LogName Application -After (Get-Date).AddHours(-1) -EntryType Error
…dan bayangkan apa yang dapat Anda lakukan dengan itu.
Coba lakukan:Import-Module SQLServer
Yang kemudian memungkinkan Anda pergi:
cd SQLSERVER:
Dan jelajahi lingkungan SQL seolah-olah itu adalah sistem file.
Saya tidak cenderung menggunakan PowerShell untuk menjelajahi SQL seperti ini terlalu sering, harus saya akui. Tetapi fakta bahwa saya pasti bisa memberi saya banyak pilihan. Fakta bahwa saya dapat menggunakan PowerShell untuk membuat dokumen Word seperti yang mereka lakukan di https://learn-powershell.net/2014/12/31/beginning-with-powershell-and-word/, atau mengirim email seperti yang dijelaskan di https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage, atau hubungi layanan web (termasuk Azure Machine Learning) seperti yang dijelaskan di https://docs.microsoft .com/en-gb/powershell/module/Microsoft.PowerShell.Utility/Invoke-WebRequest berarti bahwa dengan sedikit imajinasi, Anda dapat menggunakan PowerShell untuk melakukan apa pun yang Anda inginkan. Saya suka menggunakan Invoke-SqlCommand untuk mendapatkan data dari SQL, masukkan ke Invoke-WebRequest
untuk mendapatkan skor dari Azure ML, lalu meresponsnya. PowerShell membuatnya sangat mudah.
Oh, dan untuk menjalankan perintah PowerShell di mesin lain (yang tentu saja bisa sangat berguna), 'pencarian internet' cepat menunjukkan kepada saya halaman yang tampak berguna ini:https://www.howtogeek.com/117192/how-to -run-powershell-commands-on-remote-computers/
Anda dapat memiliki daftar komputer di dalam file, dan mengulangnya seperti ini:
Cobalah beberapa hal. Hancurkan dirimu. Dan jelajahi apa yang ditulis semua orang untuk T-SQL Selasa bulan ini, dipandu oleh Rob Sewell (@sqldbawithbeard)
@rob_farley