Go pro: Panduan pengguna kuasa untuk PowerShell

Sekiranya anda bergelut dengan Windows 10, anda pasti akan mendengar PowerShell. Sekiranya anda telah mencuba sesuatu yang menarik dengan Win7 / 8.1 baru-baru ini, PowerShell juga akan muncul. Setelah bertahun-tahun bergantung pada baris perintah Windows dan melampirkan fail batch, kini saatnya untuk melihat pandangan anda pada sesuatu yang lebih kuat, lebih adaptif — lebih baik.

PowerShell adalah tambahan yang sangat besar pada kotak alat Windows, dan ia dapat menimbulkan sedikit ketakutan memandangkan besarnya itu. Adakah itu bahasa skrip, shell perintah, lilin lantai? Adakah anda perlu mengaitkan cmdlet dengan kelas .Net untuk menjalankan dengan pembekal? Dan mengapa semua dokumen sokongan membincangkan pentadbir — adakah saya harus menjadi pentadbir Windows profesional untuk menggunakannya?

Berehatlah. PowerShell sangat kuat, tetapi tidak perlu menakutkan.

Panduan berikut ditujukan kepada mereka yang telah menjalankan satu atau dua perintah Windows atau meniru fail batch. Anggap ia sebagai transformasi langkah demi langkah dari PowerShell yang ingin tahu kepada PowerShell yang mampu.

Langkah 1: Naikkannya

Perkara pertama yang anda perlukan adalah PowerShell itu sendiri. Sekiranya anda menggunakan Windows 10, anda sudah memasang PowerShell 5 — versi terkini —. (Win10 Anniversary Update mempunyai 5.1, tetapi anda tidak akan mengetahui perbezaannya dengan Fall Update 5.0.) Windows 8 dan 8.1 dihantar dengan PowerShell 4, yang cukup baik untuk membasahi kaki anda. Memasang PowerShell pada Windows 7 tidak sukar, tetapi memerlukan perhatian lebih - dan anda perlu memasang .Net Framework secara berasingan. JuanPablo Jofre memperincikan cara memasang WMF 5.0 (Windows Management Framework), yang merangkumi PowerShell, selain alat yang kemungkinan besar tidak akan anda gunakan semasa memulakannya, di MSDN.

PowerShell menawarkan dua antara muka. Pengguna lanjutan akan menggunakan GUI sepenuhnya, yang dikenali sebagai Integrated Scripting Environment (ISE). Namun, pemula dilayan dengan baik oleh PowerShell Console, antara muka teks ringkas yang mengingatkan pada baris arahan Windows, atau bahkan DOS 3.2.

Untuk memulakan PowerShell sebagai Pentadbir dari Windows 10, klik Mula dan tatal ke bawah senarai aplikasi ke Windows PowerShell. Klik pada baris itu, klik kanan Windows PowerShell, dan pilih Run as Administrator. Di Windows 8.1, cari Windows PowerShell dalam folder Sistem Windows. Di Win7, terdapat di folder Aksesori. Anda boleh menjalankan PowerShell sebagai pengguna "normal" dengan mengikuti urutan yang sama tetapi dengan klik kiri.

Di mana-mana versi Windows, anda boleh menggunakan carian Windows untuk mencari PowerShell. Pada Windows 8.1 dan Windows 10, anda boleh meletakkannya di "Power menu" Ctrl-X (klik kanan tempat kosong di bar tugas dan pilih Properties; pada tab Navigasi, centang kotak untuk Mengganti Prompt Perintah). Setelah anda membukanya, adalah idea yang baik untuk menyematkan PowerShell ke bar tugas anda. Ya, anda akan sangat menyukainya.

Langkah 2: Taip arahan Windows kuno

Anda akan kagum dengan seberapa banyak sintaks baris perintah Windows berfungsi seperti yang diharapkan di PowerShell.

Contohnya, cdmengubah direktori (folder alias), dan dirmasih menyenaraikan semua fail dan folder yang disertakan dalam folder semasa.

Bergantung pada bagaimana anda memulakan konsol PowerShell, anda mungkin bermula pada c:\Windows\system32atau di c:\Users\. Dalam contoh tangkapan skrin, saya menggunakan cd ..(perhatikan ruang) untuk naik satu tingkat pada satu waktu, kemudian jalankan diruntuk menyenaraikan semua fail dan subfolder dalam C:\direktori.

Langkah 3: Pasang fail bantuan

Perintah suka cddan dirbukan perintah PowerShell asli. Itu alias — pengganti perintah PowerShell yang sebenar. Alias ​​boleh berguna bagi kita dengan memori jari yang sukar diatasi. Tetapi mereka bahkan tidak mula menyentuh bahagian terpenting PowerShell.

Untuk mula merasakan PowerShell sendiri, ketik helpdiikuti dengan arahan yang anda tahu. Sebagai contoh, dalam tangkapan skrin, saya menaip help dir.

Bantuan PowerShell memberitahu saya bahawa itu diradalah alias untuk arahan PowerShell Get-ChildItem. Sudah tentu, jika anda menaip get-childitempada arahan PS C:\>, anda dapat melihat apa yang anda lihat dengan dirarahan.

Seperti yang dinyatakan di bahagian bawah tangkapan skrin, fail bantuan untuk PowerShell tidak dipasang secara automatik. Untuk mengambil mereka (anda yang ingin mendapatkan mereka), layari PowerShell dalam mod Administrator, kemudian taip update-help. Memasang fail bantuan akan memakan masa beberapa minit, dan anda mungkin kehilangan beberapa modul — Bantuan untuk NetWNV dan SecureBoot gagal dipasang pada mesin ujian saya. Tetapi apabila anda selesai, sistem bantuan penuh akan sesuai dengan permintaan anda.

Mulai saat itu, ketik get-helpdiikuti dengan perintah ("cmdlet" dalam PowerShell speak, diucapkan "command-let") yang menyangkut anda dan lihat semua bantuan untuk item tersebut. Sebagai contoh, get-help get-childitemmenghasilkan ringkasan get-childitempilihan. Ini juga mendorong anda untuk mengetik variasi pada tema. Oleh itu, berikut:

get-help get-childitem -examples

menghasilkan tujuh contoh terperinci mengenai cara penggunaan get-childitem. Perintah PowerShell

get-help get-childitem -detailed

merangkumi tujuh contoh tersebut, serta penjelasan terperinci mengenai setiap parameter yang tersedia untuk get-childitemcmdlet.

Langkah 4: Dapatkan bantuan mengenai parameternya

Dalam help dirtangkapan skrin, anda mungkin menyedari terdapat dua senarai SYNTAXuntuk get-childitem. Fakta bahawa terdapat dua sintaksis berasingan untuk cmdlet bermaksud ada dua cara menjalankan cmdlet. Bagaimana anda memisahkan sintaksis - dan apakah maksud parameter? Jawapannya mudah, jika anda tahu caranya.

Untuk mendapatkan semua butiran mengenai parameter untuk get-childitemcmdlet, atau cmdlet lain, gunakan -fullparameter seperti ini:

get-help get-childitem -full

Itu menghasilkan senarai demi baris apa yang boleh anda lakukan dengan cmdlet dan apa yang mungkin berlaku (atau mungkin tidak!) Lihat tangkapan skrin.

Menyaring perincian parameter, cukup mudah dilihat yang get-childitemdapat digunakan untuk mengambil item "anak" (seperti nama subfolder atau nama fail) di lokasi yang anda tentukan, dengan atau tanpa padanan karakter tertentu. Sebagai contoh:

get-childItem “*.txt” -recurse

mengambil senarai semua *.txtfail " " dalam folder semasa dan semua subfolder (kerana -recurseparameter). Manakala yang berikut:

get-childitem “HKLM:\Software”

mengembalikan senarai semua kunci pendaftaran peringkat tinggi di HKEY_LOCAL_MACHINE\Software.

Sekiranya anda pernah mencuba masuk ke dalam registri menggunakan baris perintah Windows atau fail kumpulan, saya pasti anda dapat melihat betapa kuatnya akses semacam ini.

Langkah 5: Tuliskan namanya

Ada sebab mengapa cmdlets kita lihat setakat ini kelihatan sama: get-childitem, update-help, dan get-helpsemua ikut sama kata kerja-kata konvensyen. Dengan penuh kasih sayang, semua cmdlet PowerShell menggunakan konvensyen ini, dengan kata kerja yang mendahului kata nama (tunggal). Anda yang menghabiskan berminggu-minggu berjuang dengan perintah VB dan VBA yang tidak konsisten dapat menarik nafas lega.

Untuk melihat ke mana kita pergi, lihatlah beberapa cmdlet yang paling biasa (terima kasih kepada blog Ed Wilson Hey, Scripting Guy!). Mulakan dengan cmdlet yang masuk ke sistem anda dan tarik maklumat berguna, seperti yang berikut:

  • set-location: Menetapkan lokasi kerja semasa ke lokasi yang ditentukan
  • get-content: Mendapatkan kandungan fail
  • get-item: Mendapat fail dan folder
  • copy-item: Menyalin item dari satu lokasi ke lokasi lain
  • remove-item: Memadam fail dan folder
  • get-process: Mendapatkan proses yang dijalankan di komputer tempatan atau jauh
  • get-service: Mendapatkan perkhidmatan berjalan di komputer tempatan atau jauh
  • invoke-webrequest: Mendapatkan kandungan dari laman web di internet

Untuk melihat bagaimana cmdlet tertentu berfungsi, gunakan get-helpseperti dalam

get-help copy-item -full

Berdasarkan keterangan pertolongannya, anda dapat dengan mudah mengetahui apa yang dikehendaki oleh cmdlet. Sebagai contoh, jika anda mahu untuk menyalin semua fail dan folder anda dari Documentske c:\temp, anda akan menggunakan:

copy-item c:\users\[username] \documents\* c:\temp

Semasa anda memasukkan arahan itu, anda akan melihat beberapa sentuhan bagus yang terdapat di dalam persekitaran PowerShell. Sebagai contoh, jika anda menaip copy-idan menekan kekunci Tab, PowerShell mengisi Copy-Itemdan ruang. Sekiranya anda salah mengetik cmdlet dan PowerShell tidak dapat mengetahuinya, anda akan mendapat penerangan yang terperinci mengenai apa yang salah.

Cuba cmdlet ini. (Mungkin akan membuat anda memasang program untuk membaca kotak "tentang". Jika ya, abaikan.)

invoke-webrequest askwoody.com

Anda mendapat senarai ringkas pernyataan isi laman web, tajuk, gambar, pautan dan banyak lagi. Lihat bagaimana ia berfungsi? Perhatikan dalam get-helpsenarai invoke-webrequestbahawa invoke-webrequestcmdlet "mengembalikan koleksi bentuk, pautan, gambar, dan elemen HTML penting lainnya" - tepat apa yang harus anda lihat di layar anda.

Beberapa cmdlet membantu anda mengawal atau menggunakan PowerShell sendiri:

  • get-command: Menyenaraikan semua cmdlet yang tersedia (senarai panjang!)
  • get-verb: Menyenaraikan semua kata kerja yang tersedia (bahagian kiri cmdlet)
  • clear-host: Kosongkan paparan dalam program hos

Pelbagai parameter (ingat, get-help) membiarkan anda mengecilkan perintah dan mempersempit pilihan yang mungkin berguna bagi anda. Sebagai contoh, untuk melihat senarai semua cmdlet yang berfungsi dengan perkhidmatan Windows, cubalah ini:

get-command *-service

Ia menyenaraikan semua kata kerja yang tersedia servicesebagai kata nama. Inilah hasilnya:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

Anda boleh menggabungkan cmdlet ini dengan cmdlet lain untuk menggali hampir semua bahagian PowerShell. Di situlah paip masuk ke dalam gambar.

Langkah 6: Masukkan paip

Sekiranya anda pernah menggunakan baris arahan Windows atau menggunakan fail batch, anda tahu mengenai pengalihan dan paip. Secara sederhana, pengalihan (  >watak) dan paip ( |watak) mengambil output dari tindakan dan melekat di tempat lain. Anda dapat, misalnya, mengalihkan output dirperintah ke file teks, atau "pipa" hasil pingperintah menjadi find, untuk menyaring hasil yang menarik, seperti:

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

Dalam perintah kedua di atas, findperintah mencari rentetan packetsdalam output yang disalurkan dari askwoody.com pingdan menempelkan semua baris yang sesuai dalam fail yang disebut temp2.txt.

Mungkin mengejutkan, perintah pertama berfungsi dengan baik di PowerShell. Untuk menjalankan arahan kedua, anda mahukan sesuatu seperti ini:

ping askwoody.com | select-string packets | out-file temp2.txt

Dengan menggunakan pengalihan dan paip meluaskan kemampuan baris perintah Windows: Daripada menatal tanpa henti ke bawah skrin untuk mencari rentetan teks, misalnya, anda boleh mengumpulkan perintah Windows yang disalurkan yang melakukan pemeriksaan untuk anda.

PowerShell mempunyai kemampuan perpipaan, tetapi tidak terbatas pada teks. Sebagai gantinya, PowerShell memungkinkan Anda meneruskan seluruh objek dari satu cmdlet ke yang berikutnya, di mana "objek" adalah gabungan data (disebut sifat) dan tindakan (kaedah) yang dapat digunakan pada data.

Bahagian yang sukar, bagaimanapun, terletak pada menyelaraskan objek. Jenis objek yang dihantar oleh satu cmdlet harus sesuai dengan jenis objek yang diterima oleh cmdlet penerima. Teks adalah jenis objek yang sangat sederhana, jadi jika anda bekerja dengan teks, menyusun item adalah mudah. Objek lain tidak begitu rendah.

Bagaimana untuk mengetahuinya? Selamat datang ke get-membercmdlet. Sekiranya anda ingin mengetahui jenis objek yang dihasilkan cmdlet, pasangkannya get-member. Contohnya, jika anda ingin mengetahui proses yang dijalankan di komputer anda, dan anda telah mempersempit pilihan ke get-processcmdlet, berikut adalah cara anda mengetahui apa yang get-processdihasilkan oleh cmdlet:

get-process | get-member

Menjalankan perintah menghasilkan senarai panjang sifat dan kaedah untuk get-process, tetapi pada awal senarai anda dapat melihat jenis objek yang get-process mencipta:

TypeName: System.Diagnostics.Process

Di bawah screenshot juga memberitahu anda yang get-processmempunyai ciri-ciri yang dipanggil Handles, Name, NPM, PM, SI, VM, dan WS.

Sekiranya anda ingin memanipulasi output get-processsehingga anda dapat bekerja dengannya (berbanding dengan memaparkan senarai panjang proses aktif pada monitor), anda perlu mencari cmdlet lain yang akan berfungsi System.Diagnostics.Processsebagai input. Untuk mencari cmdlet yang bersedia, anda hanya menggunakan ... tunggu ... PowerShell:

get-command -Parametertype System.Diagnostics.Process

Itu menghasilkan senarai semua cmdlet yang dapat dikendalikan System.Diagnostics.Process.

Beberapa cmdlet terkenal kerana mengambil hampir semua jenis input. Ketua di kalangan mereka: where-object. Mungkin membingungkan, where-objectmengulangi setiap item yang dikirim ke saluran pipa, satu demi satu, dan menerapkan kriteria pemilihan apa pun yang anda minta. Terdapat penanda khas yang dipanggil $_. yang membolehkan anda menelusuri setiap item di dalam paip, satu demi satu.

Katakan anda ingin membuat senarai semua proses yang berjalan di mesin anda yang disebut " svchost" - dalam PowerShell, anda mahu memadankan pada Nameharta tanah  svchost. Cuba arahan PowerShell ini:

get-process | where-object {$_.Name -eq “svchost”}

Yang where-objectkelihatan cmdlet pada setiap System.Diagnostics.Processitem, membandingkan .Nameitem ke " svchost"; jika item itu sesuai, ia akan meludahkan hujung paip dan menaip pada monitor anda. Lihat tangkapan skrin.