Profesyonel olun: PowerShell kullanıcı kılavuzu

Windows 10 ile güreştiyseniz, şüphesiz PowerShell'i duymuşsunuzdur. Son zamanlarda Win7 / 8.1 ile süslü bir şey yapmaya çalıştıysanız, PowerShell de muhtemelen ortaya çıkmıştır. Yıllarca Windows komut satırına güvendikten ve bir araya getirilmiş toplu iş dosyalarına güvendikten sonra, daha güçlü, daha uyumlu ve daha iyi bir şeye odaklanmanın zamanı geldi.

PowerShell, Windows araç kutusuna muazzam bir ektir ve bu muazzamlık göz önüne alındığında biraz korku uyandırabilir. Bu bir betik dili mi, bir komut kabuğu mu, zemin cilası mı? Sağlayıcılarla çalıştırmak için bir cmdlet'i başlatılmış bir .Net sınıfına bağlamanız gerekiyor mu? Ve neden tüm destek belgeleri yöneticiler hakkında konuşuyor - bundan yararlanmak için profesyonel bir Windows yöneticisi olmam gerekiyor mu?

Rahatlayın. PowerShell güçlüdür, ancak göz korkutucu olması gerekmez.

Aşağıdaki kılavuz, bir veya iki Windows komutu çalıştıran veya bir toplu iş dosyasını çalıştıranlara yöneliktir. Bunu meraklı PowerShell'den PowerShell özellikli hale adım adım bir dönüşüm olarak düşünün.

1. Adım: Arttırın

İhtiyacınız olan ilk şey PowerShell'in kendisidir. Windows 10 kullanıyorsanız, zaten en son sürüm olan PowerShell 5'e sahipsiniz. (Win10 Yıldönümü Güncellemesi 5.1'e sahiptir, ancak Sonbahar Güncellemesi 5.0 ile farkı bilemezsiniz.) Windows 8 ve 8.1, ayaklarınızı ıslatmak için yeterince iyi olan PowerShell 4 ile birlikte gelir. PowerShell'i Windows 7'ye yüklemek zor değildir, ancak ekstra özen gerektirir ve .Net Framework'ü ayrı olarak yüklemeniz gerekir. JuanPablo Jofre, MSDN'de, başlatırken muhtemelen kullanmayacağınız araçlara ek olarak, PowerShell'i içeren WMF 5.0'ın (Windows Yönetim Çerçevesi) nasıl kurulacağını ayrıntılarıyla anlatıyor.

PowerShell iki arayüz sunar. İleri düzey kullanıcılar, Entegre Komut Dosyası Ortamı (ISE) olarak bilinen tam gelişmiş GUI'yi tercih edecek. Yeni başlayanlar için en iyi hizmet, Windows komut satırını andıran basit bir metin arabirimi olan PowerShell Konsolu ve hatta DOS 3.2 tarafından sağlanır.

PowerShell'i Windows 10'dan Yönetici olarak başlatmak için, Başlat'a tıklayın ve uygulamalar listesini Windows PowerShell'e kaydırın. Bu satıra tıklayın, Windows PowerShell'e sağ tıklayın ve Yönetici Olarak Çalıştır'ı seçin. Windows 8.1'de, Windows Sistem klasöründe Windows PowerShell'i arayın. Win7'de, Aksesuarlar klasöründedir. PowerShell'i aynı sırayı izleyerek ancak sol tıklama ile "normal" bir kullanıcı olarak çalıştırabilirsiniz.

Windows'un herhangi bir sürümünde, PowerShell'i aramak için Windows aramayı kullanabilirsiniz. Windows 8.1 ve Windows 10'da, bunu Ctrl-X “Güç menüsüne” koyabilirsiniz (görev çubuğunda boş bir noktaya sağ tıklayın ve Özellikler'i seçin; Gezinme sekmesinde, Komut İstemi Değiştir kutusunu işaretleyin). Açtıktan sonra, PowerShell'i görev çubuğunuza sabitlemek iyi bir fikirdir. Evet, o kadar seveceksin.

Adım 2: Eski moda Windows komutlarını yazın

PowerShell'de Windows komut satırı sözdiziminin beklendiği gibi ne kadar çalıştığına şaşıracaksınız.

Örneğin, cddizinleri (diğer adıyla klasörleri) değiştirir ve dirhalen geçerli klasörde bulunan tüm dosya ve klasörleri listeler.

Eğer PowerShell konsolunu başlatmak nasıl bağlı olarak, başlayabilir c:\Windows\system32veya en c:\Users\. Ekran görüntüsü örneğinde, cd ..her seferinde bir seviye yukarı gitmek için (boşluğa dikkat edin) kullanıyorum, ardından dizindeki dirtüm dosyaları ve alt klasörleri listelemek için çalıştırıyorum C:\.

3. Adım: Yardım dosyalarını yükleyin

Yerel PowerShell komutları gibi cdve dirdeğildir komutlar. Takma adlardır — gerçek PowerShell komutlarının yerine geçer. Takma adlar, üstesinden gelmesi zor parmak hafızası olan bizler için kullanışlı olabilir. Ancak PowerShell'in en önemli kısımlarına dokunmaya bile başlamıyorlar.

PowerShell'in kendisi hakkında bir fikir edinmeye başlamak için, helpardından bildiğiniz bir komutu yazın. Örneğin, ekran görüntüsüne yazıyorum help dir.

PowerShell yardımı, dirbunun PowerShell komutu için bir takma ad olduğunu söylüyor Get-ChildItem. Yazarsanız Tabii ki, get-childitemen PS C:\>hızlı, sizinle tam olarak ne gördüğünü bakın dirkomuta.

Ekran görüntüsünün altında belirtildiği gibi, PowerShell için yardım dosyaları otomatik olarak yüklenmez. Onları almak için (eğer yok , Yönetici modunda PowerShell'e oturum, sonra yazın onları almak istiyorum) update-help. Yardım dosyalarının yüklenmesi birkaç dakika sürecektir ve birkaç modül eksik olabilir — NetWNV ve SecureBoot için Yardım, test makineme yüklenemedi. Ancak işiniz bittiğinde, tam yardım sistemi emrinizde olacak ve arayacaksınız.

Bu noktadan sonra, get-helpsizi ilgilendiren komutu (PowerShell konuşmasında "cmdlet", "komut-let" olarak okunur) yazın ve o öğeyle ilgili tüm yardımı görün. Örneğin get-help get-childitem, get-childitemseçeneklerin bir özetini oluşturur . Ayrıca temanın varyasyonlarını yazmanızı da ister. Böylece, aşağıdakiler:

get-help get-childitem -examples

nasıl kullanılacağına dair yedi ayrıntılı örnek üretir get-childitem. PowerShell komutu

get-help get-childitem -detailed

bu yedi örneği ve get-childitemcmdlet için mevcut her parametrenin ayrıntılı açıklamasını içerir .

4. Adım: Parametreler hakkında yardım alın

Gelen help direkran, sen altında iki giriş bulunduğundan fark etmiş olabilirsiniz SYNTAXiçin get-childitem. Cmdlet için iki ayrı sözdizimi olması, cmdlet'i çalıştırmanın iki yolu olduğu anlamına gelir. Sözdizimlerini nasıl ayrı tutarsınız ve parametreler ne anlama gelir? Numarayı biliyorsanız, cevap kolaydır.

get-childitemCmdlet veya başka herhangi bir cmdlet için parametreler hakkında tüm ayrıntıları almak için -full, aşağıdaki gibi parametreyi kullanın :

get-help get-childitem -full

Bu, cmdlet ile neler yapabileceğiniz ve neler olabileceği (veya olmayabileceği!) Konusunda satır satır bir liste oluşturur. Ekran görüntüsüne bakın.

Parametre ayrıntılarını inceleyerek, get-childitembelirli karakter eşleşmeleri olsun veya olmasın, belirlediğiniz bir konumdaki "alt" öğeleri (alt klasörlerin veya dosya adlarının adları gibi) almak için kullanılabileceğini görmek oldukça kolaydır . Örneğin:

get-childItem “*.txt” -recurse

*.txtgeçerli klasördeki ve tüm alt klasörlerdeki tüm " " dosyalarının bir listesini ( -recurseparametreye bağlı olarak ) alır. Oysa şu:

get-childitem “HKLM:\Software”

içindeki tüm üst düzey kayıt defteri anahtarlarının bir listesini döndürür HKEY_LOCAL_MACHINE\Software.

Bir Windows komut satırı veya toplu iş dosyası kullanarak kayıt defterine girmeyi denediyseniz, bu tür bir erişimin ne kadar güçlü olması gerektiğini görebileceğinizden eminim.

Adım 5: İsimleri yazın

: Orada gördüğümüz davranırlar bugüne kadar aynı görünüyor bir nedeni var get-childitem, update-helpve get-helphepsi aynı fiil-isim kuralını izleyin. Merhametli bir şekilde, tüm PowerShell cmdlet'leri, (tekil) bir isimden önce gelen bir fiil ile bu kuralı kullanır. Tutarsız bir şekilde adlandırılan VB ve VBA komutları için haftalarca uğraşanlarınız rahat bir nefes alabilir.

Nereye gittiğimizi görmek için en yaygın cmdlet'lere bir göz atın (Ed Wilson'ın Hey, Scripting Guy bloguna teşekkürler). Sisteminize ulaşan cmdlet'lerle başlayın ve aşağıdakiler gibi yararlı bilgileri çıkarın:

  • set-location: Mevcut çalışma konumunu belirli bir konuma ayarlar
  • get-content: Bir dosyanın içeriğini alır
  • get-item: Dosyaları ve klasörleri alır
  • copy-item: Bir öğeyi bir konumdan diğerine kopyalar
  • remove-item: Dosyaları ve klasörleri siler
  • get-process: Yerel veya uzak bir bilgisayarda çalışan işlemleri alır.
  • get-service: Yerel veya uzak bilgisayarda çalışan hizmetleri alır.
  • invoke-webrequest: İnternetteki bir web sayfasından içerik alır

Belirli bir cmdlet'in nasıl çalıştığını görmek için aşağıdaki get-helpgibi kullanın

get-help copy-item -full

Yardım açıklamasına dayanarak, cmdlet'in ne istediğini kolayca anlayabilirsiniz. Eğer tüm dosya ve klasörleri kopyalamak istiyorsanız Örneğin, Documentsiçin c:\temp, istersek:

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

Bu komutu yazarken, PowerShell ortamına yerleştirilmiş birkaç hoş dokunuş göreceksiniz. Örneğin copy-i, Tab tuşuna yazıp basarsanız, PowerShell doldurur Copy-Itemve bir boşluk. Bir cmdlet'i yanlış yazarsanız ve PowerShell bunu çözemezse, neyin yanlış gittiğine dair çok kapsamlı bir açıklama alırsınız.

Bu cmdlet'i deneyin. ("Hakkında" kutusunu okumanız için bir program yüklemeye çalışabilir. Öyleyse, dikkate almayın.)

invoke-webrequest askwoody.com

Web sayfasının içerik bildirimlerinin, başlıklarının, resimlerinin, bağlantılarının ve daha fazlasının kısa bir listesini alırsınız. Nasıl çalıştığını gördün mü? Dikkat ederseniz get-helpiçin listeleme invoke-webrequesto invoke-webrequestcmdlet “formları, bağlantılar, resimler ve diğer önemli HTML öğelerinin döner koleksiyonları” -Kesinlikle ekranınızda görebilirsiniz gerektiğini.

Bazı cmdlet'ler, PowerShell'i kontrol etmenize veya kendi kendini kontrol etmenize yardımcı olur:

  • get-command: Mevcut tüm cmdlet'leri listeler (bu uzun bir liste!)
  • get-verb: Mevcut tüm fiilleri listeler (cmdlet'lerin sol yarısı)
  • clear-host: Ana programdaki ekranı temizler

Çeşitli parametreler (unutmayın get-help) komutları azaltmanıza ve işinize yarayabilecek seçenekleri daraltmanıza izin verir. Örneğin, Windows hizmetleriyle çalışan tüm cmdlet'lerin bir listesini görmek için şunu deneyin:

get-command *-service

serviceİsim olarak kullanılabilen tüm fiilleri listeler . İşte sonuç:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

PowerShell'in hemen hemen her bölümüne girmek için bu cmdlet'leri diğer cmdlet'lerle birleştirebilirsiniz. İşte burada borular devreye giriyor.

Adım 6: Boruları getirin

Daha önce Windows komut satırını kullandıysanız veya bir toplu iş dosyasıyla tıklandıysanız, yeniden yönlendirme ve borular hakkında bilgi sahibi olursunuz. Basit bir ifadeyle, hem yönlendirme (  >karakter) hem de borular ( |karakter) çıktıyı bir eylemden alır ve başka bir yere yapıştırır. Örneğin , aşağıdaki gibi ilginç sonuçları filtrelemek diriçin bir komutun çıktısını bir metin dosyasına yönlendirebilir veya bir pingkomutun sonucunu bir komutun sonucunu "yönlendirebilirsiniz" find:

dir > temp.txt

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

Yukarıdaki ikinci komutta, findkomut dizeyi packetsbir askwoody.com'un borulu çıktısında arar pingve eşleşen tüm satırları adlı bir dosyaya yapıştırır temp2.txt.

Belki şaşırtıcı bir şekilde, bu komutlardan ilki PowerShell'de iyi çalışıyor. İkinci komutu çalıştırmak için şuna benzer bir şey istersiniz:

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

Yeniden yönlendirme ve kanalların kullanılması, Windows komut satırının yeteneklerini büyük ölçüde genişletir: Örneğin, bir metin dizesini aramak için bir ekranda sonsuzca aşağı kaydırmak yerine, sizin için inceleme yapan bir borulu Windows komutu oluşturabilirsiniz.

PowerShell'in borulama özelliği vardır, ancak metinle sınırlı değildir. Bunun yerine, PowerShell, bir cmdlet'ten diğerine tüm bir nesneyi aktarmanıza izin verir; burada bir "nesne", veriler (özellikler adı verilir) ve veriler üzerinde kullanılabilen eylemler (yöntemler) kombinasyonudur.

Ancak işin zor kısmı nesneleri hizalamaktır. Bir cmdlet tarafından teslim edilen nesnenin türü, alıcı cmdlet tarafından kabul edilen nesne türleriyle eşleşmelidir. Metin çok basit bir tür nesnedir, bu nedenle metinle çalışıyorsanız, öğeleri sıralamak kolaydır. Diğer nesneler o kadar temel değildir.

Nasıl çözülür? get-memberCmdlet'e hoş geldiniz . Bir cmdlet'in ne tür bir nesne ürettiğini bilmek istiyorsanız, onu yönlendirin get-member. Örneğin, bilgisayarınızda çalışan işlemleri anlamaya çalışıyorsanız ve seçenekleri cmdlet'e daralttıysanız, get-processcmdlet'in ne get-processürettiğini şu şekilde bulabilirsiniz :

get-process | get-member

Bu komutu çalıştırmak için uzun bir özellik ve yöntem listesi oluşturur get-process, ancak listenin en başında aşağıdakileri get-process oluşturan nesnenin türünü görebilirsiniz :

TypeName: System.Diagnostics.Process

Aşağıdaki ekran görüntüsünde de söyleyen get-processdenilen özelliklere sahip Handles, Name, NPM, PM, SI, VM, ve WS.

Çıktısını, get-processonunla çalışabilmek için değiştirmek istiyorsanız (monitörde uzun bir etkin işlem listesi görüntülemesinin aksine), System.Diagnostics.Processgirdi olarak çalışacak başka bir cmdlet bulmanız gerekir . İstekli bir cmdlet bulmak için, sadece kullanın… bekleyin… PowerShell:

get-command -Parametertype System.Diagnostics.Process

Bu, işleyebilecek tüm cmdlet'lerin bir listesini oluşturur System.Diagnostics.Process.

Bazı cmdlet'ler neredeyse her tür girdiyi almakla ünlüdür. Bunlardan en önemlisi ise: where-object. Belki kafa karıştırıcı bir where-objectşekilde, ardışık düzen boyunca gönderilen her bir öğe arasında tek tek döngü yapar ve istediğiniz seçim kriterlerini uygular. Adında özel bir işaret var $_. bu, borudaki her öğeye birer birer adım atmanıza olanak tanır.

Diyelim ki, makinenizde çalışan ve " svchost" adı verilen tüm işlemlerin bir listesini bulmak istediğinizi varsayalım - PowerShell dilinde, bir Nameözelliği  üzerinde eşleştirmek istiyorsunuz svchost. Bu PowerShell komutunu deneyin:

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

where-objectHer birinde cmdlet görünüyor System.Diagnostics.Processöğe, karşılaştırır .Name“için o öğenin svchost”; öğe eşleşirse, borunun ucundan tükürür ve monitörünüze yazılır. Ekran görüntüsüne bakın.