15Jul

Geek Okulu: Windows'u PowerShell ile Otomatikleştirmeyi Öğrenin

Geek School'un bu sürümünde, Windows'un sağında bulunan güçlü PowerShell komut dosyası dilini anlamanıza yardımcı olacağız ve bir BT ortamında bilmek son derece yararlı olacaktır.

Bu seri sınav etrafında yapılandırılmamış olsa da, PowerShell'i öğrenmek, bir ağ yöneticisi olarak yapabileceğiniz en önemli şeylerden biridir; bu nedenle, BT kariyerinize yardımcı olmayı öğrenmek istediğiniz bir şey varsa, işte budur. Artı, çok eğlenceli.

Giriş

PowerShell, Microsoft'un sunması gereken en güçlü otomasyon aracıdır ve her ikisi de bir kabuk ve bir kodlama dili.

Lütfen bu serinin Windows 8 ve Server 2012 ile birlikte gönderilen PowerShell 3'e dayandığını unutmayın. Windows 7 çalıştırıyorsanız, devam etmeden önce PowerShell 3 güncelleştirmesini indirin.

Konsol ve ISE

ile Tanışın Kutudan PowerShell ile, Konsol'dan ve İMKB olarak da bilinen Integrated Scripting Environment ile etkileşime girmenin iki yolu vardır.İMKB, PowerShell 2 ile gönderilen gizemli bir sürümden büyük ölçüde gelişti ve bir çalışma kutusu oluşturmak için Win + R klavye kombinasyonuna basarak, daha sonra powershell_ise yazıp enter tuşuna basarak açılabilir.

Görüldüğü gibi, İMKB'nin spor bölümünü görebilirsiniz, böylece İMKB'nin alt yarısında sonuçlarını görebilme çabucak hızlı bir şekilde yazabilmeniz mümkündür. Komut dosyanızın çıktılarının bulunduğu İMKB'nin alt yarısı da komut istemi gibi bir REPL istemi olarak kullanılabilir. V3 ISE nihayet hem interaktif konsol hem de komut dosyası bölmesinde intellisense desteğini ekledi.

Alternatif olarak, bu serinin çoğunda kullanacağım olan PowerShell Konsolu'nu kullanarak PowerShell ile etkileşim kurabilirsiniz. PowerShell Konsolu, komut istemine çok benzer davranır - yalnızca komutları girersiniz ve sonuçlarını tükürür. Windows PowerShell Konsolu'nu açmak için, bir çalışma kutusunu açmak için tekrar Win + R klavye kombinasyonuna basın ve powershell yazın ve enter tuşuna basın.

REPL, anlık memnuniyet için harika bir komut istemi verir: bir komut girerseniz sonuç alırsınız. Konsol intellisense sunmuyor olsa da, sekme tamamlama denilen şey çok aynı işlevi - basitçe bir komut yazmaya başlamak ve olası eşleşmeleri döngüsü sekmesini basın sunmuyor.

Yardım Sistemini Kullanarak

Windows'u yüklediğinizde, PowerShell'in geçmiş sürümlerinde yardım dosyaları eklenmiştir. Bu, çoğunlukla iyi bir çözümdü ancak önemli bir problemimiz vardı.PowerShell yardım ekibinin yardım dosyalarında çalışmayı bırakması gerektiğinde, PowerShell geliştiricileri kodlamayı ve değişiklik yapmaya devam etmekle meşguldü.Bu, PowerShell gönderildiğinde, kodda yapılan yeni değişiklikleri içermediği için yardım dosyalarının yanlış olduğu anlamına geliyordu. Bu sorunu çözmek için PowerShell 3 kutudan yardım dosyaları çıkarmaz ve güncelleştirilebilir bir yardım sistemi içerir. Bu, bir şey yapmadan önce en son yardım dosyalarını indirmek isteyeceğiniz anlamına gelir. Bunu bir PowerShell Konsolu açarak ve çalıştırarak yapabilirsiniz:

Update-Help

İlk PowerShell komutunu çalıştırdığınızda tebrikler! Gerçek şu ki, Update-Help komutu yalnızca onu çalıştırmaktan çok daha fazla seçeneğe sahiptir ve onları görmek için komutun yardımını görmek isteyeceğiz. Bir komutun yardımını görüntülemek için, yardım almak istediğiniz komutun adını Get-Help komutunun Name parametresine iletmeniz yeterlidir, örneğin:

Get-Help -Name Update-Help

Siz muhtemelen nasıl yorumlanacağını merak ediyorsunuzdurtüm bu metni yine de, yani neden sözdizimi bölümünde iki çok bilgi var ve neden orada çok parantez var?Önce ilk önce: sözdizimi bölümünde iki blok bilgi bulunduğunun nedeni, komutun çalıştırılmasının farklı yollarını temsil etmesidir. Bunlara teknik olarak parametre kümeleri denir ve yalnızca bir kerede kullanabilirsiniz( farklı kümelerdeki parametreleri karıştıramazsınız).Yukarıdaki ekran görüntüsünde, üstteki parametre setinin bir SourcePath parametresi olduğunu, alttaki parametrenin bir SourcePath parametresinin olmadığını görürsünüz. Neden ağınızda yüklü olan başka bir makineden yardım dosyalarınızı güncelleştiriyorsanız, üst parametre setini( SourcePath'i içeren bir parametre) kullanmanızın sebebi, bir kaynak yol belirtmeniz gerekmezkensadece Microsoft'un en yeni dosyalarını almak istedim.

İkinci soruyu cevaplamak için, dosyaları izleyen bazı sözdizimi var ve şu şekildedir:

  • Bir parametre adı ve türü etrafında köşeli ayraçlar isteğe bağlı bir parametre olduğu anlamına gelir ve komut olmadan da işe yarar.
  • Parametre adının etrafındaki köşeli ayraçlar, parametrelerin konumsal parametre olduğu anlamına gelir.
  • Köşeli ayraçlardaki bir parametrenin sağındaki şey, parametrenin beklediği veri türünü söyler.

Yardım dosyası sözdizimini okumayı öğrenirken, belli bir parametre hakkında hiç emin değilseniz, sadece yardım dosyanızın sonuna gelin ve parametreler bölümüne gidin ve burada size biraz daha bilgi vereceğim.her parametre.

Get-Help -Name Güncelleme-Help -Full

Yardım sistemiyle ilgili bilmeniz gereken son şey, bunu komutları keşfetmek için nasıl kullanabileceğinizdir. Bu aslında çok kolaydır. Görüyorsunuz ki, PowerShell hemen hemen her yerde joker karakteri kabul eder, böylece Get-Help komutuyla birlikte komutları kolayca keşfetmenize izin verir.Örneğin, Windows Hizmetleri ile uğraşan komutları arıyorum:

Get-Help -Name * service *

Tabii, bu bilgilerin tümü yarasanın kullanışlı olmayabilir, ancak bana güvenin, zaman ayırın ve nasıl kullanılacağını öğreninyardım sistemi. Her zaman kullanışlı, hatta yıllarca bunu yapan ileri düzey tarayıcılara geliyor.

Güvenlik

Bu, güvenlikten söz etmeden uygun bir tanıtım olmazdı.PowerShell ekibi için en büyük endişe, PowerShell'in komut dosyası çocukları için en yeni ve en büyük saldırı noktası olmasıdır. Bunun gerçekleşmediğinden emin olmak için birkaç güvenlik önlemi koydular, onlara bir göz atalım.

En temel koruma biçimi, PS1 dosya uzantısının( bir PowerShell komut dosyasını belirtmek için kullanılan uzantı) aslında bir Not Defteri ile kaydedilmiş bir PowerShell ana bilgisayarıyla kayıtlı olmadığı gerçeğinden kaynaklanmaktadır. Yani, bir dosyaya çift tıklarsanız, çalıştırmak yerine not defteriyle açılır.

İkincisi, yalnızca komut dosyasının adını yazarak kabuktan komut dizileri çalıştıramazsınız; senaryonun tam yolunu belirtmelisin. C sürücüsünde bir komut dosyası çalıştırmak isterseniz aşağıdakileri yapmanız gerekir:

C: \ runme.ps1

Veya zaten C sürücüsünün kök dizinindeyseniz aşağıdakileri kullanabilirsiniz:

. \ Runme.ps1

Sonunda, PowerShell'de yalnızca eski komut dosyalarını çalıştırmanıza engel olan Yürütme İlkeleri adlı bir öğe vardır. Aslında, varsayılan olarak, herhangi bir komut dosyası çalıştıramazsınız ve bunları çalıştırmanızın izin verilmesi için yürütme politikasını değiştirmeniz gerekir.4 önemli Yürütme Politikası vardır:

  • Sınırlı : PowerShell'deki varsayılan yapılandırma budur. Bu ayar, imzasından bağımsız olarak hiçbir komut dosyası çalıştırılamayacağı anlamına gelir. Bu ayarla PowerShell'de çalıştırılabilecek tek şey, tek bir komuttur.
  • AllSigned: Bu ayar, komut dizelerinin PowerShell'de çalışmasına izin verir. Komut dosyası, güvenilir bir yayıncının ilişkili bir dijital imzasına sahip olmalıdır. Komut dosyalarını güvenilir yayınevlerinden çalıştırmadan önce bir komut istemi olacaktır.
  • RemoteSigned : Bu ayar, komut dosyalarının çalıştırılmasına izin verir, ancak Internet'ten yüklenen komut dosyası ve yapılandırma dosyalarının güvenilir bir yayımcıdan ilişkili bir dijital imzaya sahip olmasını gerektirir. Yerel bilgisayardan çalıştırılan komut dizilerinin imzalanması gerekmez. Komut dosyasını çalıştırmadan önce herhangi bir istem yok.
  • Sınırsız : Bu, Internet'ten indirilen tüm komut dosyaları ve yapılandırma dosyaları da dahil olmak üzere imzasız betiklerin çalışmasına izin verir. Bu, Outlook ve Messenger'daki dosyaları içerecektir. Burada risk, herhangi bir imza veya güvenlik olmaksızın senaryolar yürütüyor. Bu ayarı asla bize yaptırmadık.

Geçerli Yürütme İlkesinin neye ayarlandığını görmek için bir PowerShell Konsolu açın ve şunu yazın:

Get-ExecutionPolicy

Bu ders ve çoğu durumda RemoteSigned İlkesi en iyisidir, bu nedenle devam edin ve aşağıdakileri kullanarak ilkesini değiştirin.

Not: Bu, yükseltilmiş PowerShell Konsolundan yapılmalıdır.

Set-ExecutionPolicy RemoteSigned

Bu arada millet, yarın daha PowerShell eğlencesi için görüşürüz.

Reddi: Bir PowerShell komutu için uygun terim bir cmdlet'tir ve bundan böyle bu doğru terminolojiyi kullanacağız. Onlara sadece bu giriş için komutlar çağırmak daha uygun hissetti.

Herhangi bir sorunuz varsa, bana @taybgibb ile tweet edebilir veya sadece bir yorum bırakabilirsiniz.