Otomasyon için PowerShell Komut Dosyalarını Kullanma


"Windows PowerShell'i Anlamak" başlıklı makale serisinin ilk bölümünde, komut dosyalarının olanaklarını zaten tartışmıştık.

Komut dosyaları, PowerShell'deki görevleri otomatikleştirmenize olanak tanır. Yalnızca Windows Server, Windows İş İstasyonları, Exchange, SQL veya SharePoint gibi Microsoft sistemleri otomatikleştirilemez. Birçok üçüncü taraf satıcı da sunucu hizmetlerini yönetmek için PowerShell'e güveniyor. ScriptRunner gibi araçlar, verilen olanakları daha da geliştirir: Örneğin, ScriptRunner Web Hizmeti Bağlayıcısı ile, REST API'lerini kullanarak üçüncü taraf sistemleri kolayca otomatikleştirebilirsiniz.

Ancak PowerShell otomasyonuna dalmadan önce bir şeye ihtiyacımız var: PowerShell komut dosyaları. Aşağıda bunları nasıl oluşturacağımızı veya nerede bulacağımızı ve PowerShell'deki komut dosyalarıyla hangi olasılıkların ortaya çıktığını daha ayrıntılı olarak ele alacağız.

Bitmiş komut dosyalarını indirin

İnternette PowerShell tabanlı ve farklı kullanımları olan birçok script bulunmaktadır. Microsoft, “BT Uzmanları için Komut Dosyası Kaynakları” web sayfasında indirebileceğiniz, kullanabileceğiniz veya ekleyebileceğiniz birçok ücretsiz komut dosyası sunmaktadır. Komut dosyasının mümkün olduğunca güncel olduğundan ve iyi bir derecelendirmeye sahip olduğundan emin olun. İndirme sayfası ayrıca betiğin hangi işletim sistemleri için yayınlandığını da gösterir. Komut dosyalarının lisans koşulları da indirme sırasında görüntülenir.

PowerShell betikleri hakkında bilmeniz gerekenler

PowerShell betikleri sistemlerde kapsamlı özelleştirmeler yapabilir. Bu yüzden betiği çalıştırmadan önce ona bakmalı ve istemediğiniz herhangi bir eylemi gerçekleştirmediğinden emin olmalısınız. PowerShell komut dosyalarında, PowerShell komutlarına (cmdlet'ler) ek olarak komut istemi gibi diğer komutları da kullanabilirsiniz. PowerShell betiklerinde üçüncü taraf araçlar da kullanılabilir.

İyi PowerShell betikleri, yürütme ilkesinin (bu makalenin ilk bölümüne bakın) onları engellememesi için dijital olarak imzalanmalıdır. Acil bir durumda PowerShell yürütme ilkesini kapatabilirsiniz. Bu, imzasız komut dosyalarının çalışmasına neden olur ancak sisteminiz artık korunmaz. Ancak yürütme politikası tam koruma sağlamamaktadır. ExecutionPolicy, sistemi yanlışlıkla bir komut dosyasını başlatmaya karşı korur. Bu nedenle ExecutionPolicy kapsamlı bir güvenlik özelliği değildir. Politikanın devre dışı bırakılması, PowerShell'in yönetim bağlamı menüsünden başlatılmasını gerektirir (Şekil 1).

Şekil 1: PowerShell'de ve yürütme politikasında ayarlamalar yapmak için PowerShell'in yönetici olarak başlatılması gerekir.

Yürütme ilkesini kapatmak için aşağıdaki komutu kullanın:

Set-ExecutionPolicy Unrestricted

Serinin ilk makalesinde çeşitli seçenekleri zaten tartışmıştık. İnternetten gelen komut dosyalarının saygın bir kaynaktan geldiğinden emin olmalısınız. Ayrıca script, gerçekleştirilecek eylemlere ilişkin yorumları da içermelidir. Bir betiğin başında betiği kimin oluşturduğu, ne yaptığı ve kullanıcıların bu konuda ne bilmesi gerektiği hakkında bilgiler bulunmalıdır (Şekil 2'de gösterildiği gibi).

Şekil 2: Komut dosyaları, kullanıcıların komut dosyası başlatıldığında ne yaptığını anlayabilmeleri için yeterli bilgi içermelidir.

Genel olarak, komut dosyalarındaki yorumların, komut dosyasında hangi eylemlerin takip edildiğini ve kullanıcıların komut dosyasındaki bir şeyi düzenlemesi gerekip gerekmediğini belirtmesi mantıklıdır.

Komut dosyalarını başlat

Bir betiği başlatmak için öncelikle bilgisayardaki bir dizine indirilir. Daha sonra komut dosyası *.ps1 dosyası aracılığıyla çağrılır. Çoğu komut dosyasının başlangıç için hala farklı parametrelere ihtiyacı vardır. Bu konuda ya betiğin başında bilgilendirilmeli ya da yardımda seçenekler belgelenmelidir. Eğer scriptin saklandığı dizinde iseniz scripti “.skript.ps1” sözdiziminden sonra başlatmalısınız.

Komut dosyalarını kendiniz oluşturma

Eğer scriptleri kendiniz oluşturmak istiyorsanız uygun bir editör kullanmalısınız. Örnekler, Windows'un bir parçası olan Windows PowerShell Tümleşik Komut Dosyası Ortamı (ISE), Microsoft Visual Studio Code, Microsoft'un açık kaynak düzenleyicisi veya açık kaynak çözümü Notepad++'dır.

Komut dosyaları oluşturmayı öğrenme

PowerShell scriptlerinin nasıl kullanılacağını öğrenmek için kurslara rezervasyon yaptırmak mutlaka gerekli değildir. İnternette PowerShell ile öğrenmenize yardımcı olacak çeşitli siteler vardır. YouTube videoları ayrıca PowerShell'i öğrenmenize de yardımcı olur. İyi bilinen örnekler şunlardır:

  • Microsoft PowerShell'e Başlarken
  • ScriptRunner'ın Youtube kanalı
  • PowerShell [Hyper-V Kullanıcıları ve Diğerleri için Giriş Eğitimi]
  • Yeni Başlayanlar İçin Windows PowerShell Eğitimi
  • Windows-Scripting.com

ISEStereoids - Windows PowerShell ISE Uzantısı

ISESsteroids, komut dosyalarını düzenlemek için Windows PowerShell ISE'yi kullanır, ancak onu genişletir. Kullanmak için uzantıyı yalnızca “Start-Steroids” ile yüklemeniz yeterlidir. PowerShell ISE'nin yerini alan ek bir uygulama değil, bir PowerShell modülüdür.

Ideara PowerShell Plus - Ücretsiz Düzenleyici

Idera'nın ücretsiz PowerShell Plus düzenleyicisi, PowerShell komut dosyaları için bir geliştirme ortamı sağlar. Uygulama içerisinde scriptlerinize dahil edebileceğiniz hazır script parçaları bulunmaktadır. Genel olarak Idera PowerShell Plus'ın işlevselliği, PowerShell ISE'nin işlevselliğine ve ayrıca şablonlardan komut dosyaları oluşturma becerisine benzer. Kurulumdan sonra uygulamayı başlatın. Bir hak hatası alırsanız uygulamayı içerik menüsünden yönetici haklarıyla başlatın.

Başlangıçtan sonra düzenleyiciyi ayarlamanıza yardımcı olacak bir sihirbaz görünür. Örneğin, kurulum sırasında komut dosyalarının yürütme politikasını kontrol edebilir ve mevcut durumu görebilirsiniz. Ayrıca SQL Sunucuları için doğrudan PowerShell betiklerini çalıştırmak üzere SQL Sunucularını Düzenleyiciye bağlayabilirsiniz. Daha sonra komut dosyalarını düzenlemeye başlayabilirsiniz.

PowerShell ile Visual Studio Kodunu Kullanma

Microsoft Visual Studio kodundan daha önceki bölümlerde bahsetmiştik. Ücretsiz geliştirme ortamı ile sadece programlama dilleri ile çalışmakla kalmayıp aynı zamanda PowerShell scriptlerini indirip kendi scriptlerinizi geliştirebilirsiniz.

Şekil 3: Visual Studio koduyla PowerShell betikleri geliştirme

Visual Studio Code (VSCode), platformlar arası uygulamalar ve uygulamalar geliştirmenize olanak tanır. Windows, Linux ve macOS X ile en önemli platformlar desteklenir. Microsoft, Visual Studio Code'u (VSCode) açık kaynak olarak ücretsiz olarak sağlar. PowerShell Core, PowerShell'in Linux ve macOS X için de mevcut olan yeni sürümüdür. Bu yeni sürüm aynı zamanda Visual Studio koduyla da kullanılabilir. Visual Studio Code'daki Terminal sekmesi, VSCode tarafından desteklenen kabukları açmanıza olanak tanır. PowerShell burada da mevcuttur. “CTRL+P ” veya “CMD+P ” (macos X) tuş kombinasyonunu kullanarak üst alanda bir arama çubuğu görünür. Burada VSCode için uzantıları, örneğin PowerShell'i yükleyebilirsiniz. Bunu yapmak için “ext install powershell” komutunu girin.

Linux'ta PowerShell Core'u kullanma

Son bölümde bahsettiğimiz PowerShell Core Linux'ta da kullanılabiliyor. PowerShell Core'u bir Linux makinesine yüklemek için öncelikle GPG Keys genel depolarını içe aktarmanız gerekir:

curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list

Ubuntu deposu daha sonra Microsoft tarafından kaydedilir ve bir güncelleme gerçekleştirilir:

curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list
sudo apt-get update

PowerShell Core, Microsoft'un Ubuntu deposundan içe aktarılmıştır.

PowerShell daha sonra yüklenir ve hemen başlatılabilir:

sudo apt-get install -y powershell

Kurulumdan sonra PowerShell kullanılabilir hale gelir ve komut dosyaları oluşturmak için de kabukla çalışabilirsiniz.

Kendi PowerShell komut dosyalarınızı dönüştürün

Araçlar ve işletim sistemleri ile bu makaledeki ve makalenin ilk bölümündeki prosedürleri temel alarak kendi komut dosyalarınızı da oluşturabilirsiniz. Komut dosyaları oluşturmak için kullanılabilen cmdlet'lere ek olarak PowerShell ayrıca gelişmiş yetenekler de sunar. Örneğin, Windows PowerShell etkinliklerini durdurmak için Başlat-Uyku cmdlet'ini kullanırsınız. Start-Sleep -s 10 komutu betiği on saniye süreyle durdurur. Uyku Başlat -m 10000 milisaniyeyi kullanır. İşlem hattı operatörünü kullanıyorsanız | Out-Printer, cmdlet'lerin çıktısını Out-Printer cmdlet'ine iletmek için kullanılır; PowerShell, çıktıyı varsayılan yazıcıya yazdırır.

Yazıcıyı tırnak işaretleri içinde ve yazıcı denetleyicisindeki etiketi de belirtebilirsiniz. PowerShell'de kendi uyarılarınızı görüntülemek için Write-Warning cmdlet'ini kullanabilirsiniz. Write-Host, varsa PowerShell Konsoluna/Ana Bilgisayara çıktı yazar. Bu iki komut genellikle PowerShell Galerisinden indirebileceğiniz komut dosyalarında bulunur. Çıktıya ilişkin renkleri -ForeGroundColor ve -BackGroundColor ile yapılandırırsınız.

Değişkenlerle Çalışmak

Ayrıca değişkenleri kabuk içinde de tanımlayabilmeniz ilginçtir. Bu değişkenleri bir komut dosyasında kullanabilirsiniz. Örneğin, geçerli tarihi $today değişkeni olarak saklamak istiyorsanız, kabuğa $today=Get-Date komutunu girebilirsiniz. Bugünün tarihi daha sonra $today değişkeni olarak saklanır. Daha sonra kabuğa $today girerseniz geçerli tarih görüntülenecektir.

Get-Date -Displayhint Date komutu yalnızca tarihi görüntüler, Get-Date -Displayhint Time ise yalnızca saati görüntüler. Belirli bir cmdlet'in ne tür bir nesne alacağını, Get komutunun sonuçlarını bir ardışık düzen operatörü (|) kullanarak Get-Member komutuna ileterek belirleyebilirsiniz. Bu, Get-Service | Alınan nesneleri Get-Member'e göndermek için Get-Member komutu.

Bu komut, bir komutun döndürdüğü .NET nesnesi hakkındaki bilgileri görüntüler. Bu bilgiler nesnenin türünü, özelliklerini ve yöntemlerini içerir. Örneğin, bir hizmet nesnesinin tüm özelliklerini görüntülemek için Get-Service | Get-Member -MemberType *özelliği.

Dosyaları ve nesneleri kopyalama, silme ve yönetme

Dosyaları veya klasörleri komut dosyalarına kopyalamak için Copy-Item cmdlet'ini kullanırsınız. Ayrıca kayıt defteri anahtarlarını, sertifikaları ve daha fazlasını da kopyalayabilirsiniz. Örneğin, Copy-Item C:\\Scriptstest.txt C:\\Test komutu test.txt dosyasını kopyalar.

Copy-Item C:\\Scripts* C:\\Test komutu, karşılık gelen kaynak klasördeki tüm dosyaları hedef klasöre kopyalar. Copy-Item C:\\Scripts C:\\Test -Recurse komutu, C:\ klasöründeki C:\\Scripts klasörünün bir kopyasını oluşturur. \Test klasörü. -Recurse seçeneği olmadan, C:\\Test'de bir Komut Dosyası klasörü oluşturulur, ancak hiçbir dosya ve klasör kopyalanmaz. Complete komutunun yanı sıra cpi, cp veya copy kısaltmalarıyla da çalışabilirsiniz.

Move-Item cmdlet'i nesneleri taşır: Move-Item C:\\Scriptstest.zip c:\\test. Kopyalarken olduğu gibi burada da yer tutucularla çalışabilirsiniz. Varsayılan olarak, Move-Item hedef klasördeki mevcut dosyaların üzerine yazmaz. -Force parametresi mevcut hedef dosya veya klasörlerin üzerine yazar: Move-Item C:\\Scriptstest.zip C:\\Test -Force. Move-Item C:\\Scriptstest.log C:\\Testad.log komutu, dosyaları aynı anda taşır ve yeniden adlandırır.

Move-Item'in yanı sıra mi, mv veya move ile de çalışabilirsiniz. Yeni dosyalar veya klasörler oluşturmak için Yeni Öğe cmdlet'ini kullanırsınız. C:\\TempPowerShell adında yeni bir boş klasör oluşturmak için Yeni Öğe C:\\TempPowerShell -Type Directory komutunu kullanırsınız. > klasör.

Yeni bir dosya oluşturmak için aynı sözdizimini kullanın ancak Dosya yazın: Yeni-Öğe C:\\Scriptscript.txt -Dosya Türü. Mevcut bir dosyayı yeni bir boş dosyayla değiştirmek için New-Item C:\\Scriptsskript.txt -Type File -Force komutunu kullanın. İçeriği olarak belirtilen metni içeren yeni bir dosya oluşturmak için New-Item C:\\Scriptsskript.txt -Type File -Force -Value “Text ” komutunu kullanın. Ayrıca Yeni Öğe yerine ni'yi de kullanabilirsiniz.

Bir metin dosyasına veri eklemek için Add-Content cmdlet'ini kullanırsınız: Add-Content C:\\Scriptstest.txt Text. Varsayılan olarak İçerik Ekle, yeni değeri metin dosyasındaki son karakterden sonra ekler.

Bir dosyanın içeriğini Set-Content ile değiştirin. Clear-Content cmdlet'i bir dosyanın içeriğini siler. Çalıştırıldıktan sonra dosya hala mevcuttur ancak içeriği yoktur. Burada joker karakterleri de kullanabilirsiniz: Clear-Content C:\\Test*. Cmdlet, metin dosyalarının yanı sıra Excel tablolarını, Word belgelerini ve diğer dosyaları da destekler. Clear-Content yerine clc'yi de kullanabilirsiniz. Remove-Item cmdlet'i nesneleri siler: Remove-Item C:\\Scriptstest.txt.

* joker karakteri belirtilen klasördeki nesneleri siler: Remove-Item C:\\Scripts*. Remove-Item C:\\Scripts* Recurse komutunun silme işlemini onaylamasına gerek yoktur. Remove-Item C:\\Scripts* -Exclude *.doc komutu, -Exclude ile hariç tuttuklarınız dışındaki tüm dosyaları siler. Remove-Item C:\\Scripts* -Include .xls,.doc yalnızca -Include'in arkasındaki dosyaları siler. Her iki seçeneği birlikte de kullanabilirsiniz, örneğin: Remove-Item C:\\Scripts* -Include *.txt -Exclude *test*.

Burada PowerShell, dosya adında “test” dizesi bulunan dosyalar dışında klasördeki tüm metin dosyalarını siler. -Whatif parametresi hiçbir şeyi kaldırmaz ancak ne olacağını döndürür: Remove-Item C:\\windows*.exe -Whatif.

Remove-Item yerine ri, rd, erase, rm 'i de kullanabilirsiniz. , rmdir veya del. Mevcut nesneleri Rename-Item cmdlet'iyle yeniden adlandırın: Rename-Item C:\\Scriptstest.txt new.txt. rni ve ren komutları da hedefe yönlendirir.

İlgili makaleler