Microsoft, yeni Outlookun Windows 10a yüklenmesini zorunlu hale getirecek
Microsoft şu anda kullanıcıları yeni ürün ve hizmetlere dönüştürmede zorluk yaşıyor.
Peki ya bilgisayarınız sıkıcı görevleri sizin yerinize halledebilseydi? Windows PowerShell ile bu mümkündür. İşte hiç kimsenin tekrar tekrar yapmak istemediği tekrarlayan günlük görevleri otomatikleştirmek için PowerShell'in nasıl kullanılacağı.
İçindekiler
Microsoft PowerShell, yöneticiler için güçlü bir araç olan bir komut satırı yardımcı programı ve betik dilidir ve bilgisayarlar ve ağlar için çok çeşitli görevleri otomatikleştirmenize olanak tanır. PowerShell, Komut İstemi'nin bileşenlerini içerir ve .NET framework üzerine kurulmuştur. WebTech360 hakkında okuyorsanız, PowerShell'in BT yöneticilerinin büyük ağları yönetmek için tercih ettiği araç olduğunu bilmelisiniz.
PowerShell'i nasıl kullanacağınızı öğrenmek, günlük hayattaki pek çok sıkıcı görevi basitleştirecektir. Ayrıca her sunucuyu tek tek ayarlamanıza gerek kalmadan ağ üzerinden sistem genelinde değişiklikler yapabilirsiniz. PowerShell , hibrit bulut ortamlarını çalıştırmanın vazgeçilmez bir parçası haline geliyor .
PowerShell'in daha verimli çalışmanıza ve ağınızı etkin bir şekilde çalıştırmanıza yardımcı olmak için pek çok farklı kullanımı vardır. En temel kullanım alanları şunlardır: sistemlerde günlük güncellemeleri planlamak, mevcut süreçler için raporlar oluşturmak, periyodik servisler vb. Bu görevlerin çoğunun GUI üzerinden yapılabileceği doğru, ancak PowerShell'in amacı bunları daha hızlı yapmaktır.
Kurulumu birkaç dakika süren düzenli bir bakım göreviniz varsa, aynı işlevi tek bir adlandırılmış PowerShell komutuna yazabilirsiniz. Yani bir dahaki sefere o betiği açtığınızda arka planda çalışacaktır. PowerShell'in betik mantığına hakim olmak, nesnelerin, değişkenlerin nasıl çalıştığını anlamak ve bunu ağınızda akıllıca uygulamak, PowerShell'i daha önce neden kullanmadığınızı sorgulamanıza yol açacak.
Bu eğitim, özellikle Windows Komut İstemi'ne aşinaysanız, BT alanında yeni olanlar için faydalı olacak olan PowerShell'in temellerini ele alacaktır. Makalede temel araçların ve komutların nasıl kullanılacağı, dosya ve klasörlerin nasıl yönetileceği, nesnelerin nasıl anlaşılacağı, değişkenlerin nasıl kullanılacağı ve uzak sunucuların nasıl yönetileceği anlatılacaktır.
Windows NT piyasaya sürüldükten sonra CMD.EXE, Windows için komut satırı yardımcı programı haline geldi. CMD.EXE, DOS öncülünden (COMMAN.COM) bazı bileşenleri devralmış olsa da, hâlâ oldukça "ilkel" bir betik diline dayanıyordu: Windows Komut dosyalarını (.CMD ve .BAT) kullanıyordu. Windows Scripting Host'un ve VBScript ve JScript dillerinin eklenmesi, yardımcı programın betik oluşturma yeteneklerini büyük ölçüde artırdı.
Bu teknolojiler, gelişmiş komut satırı yardımcı programları ile betik ortamlarının iyi dengelenmiş bir karışımıdır. Aslında asıl mesele CMD.EXE, .CMD ve Windows Scripting Host dosyalarının kaç tanesinin manipüle edilebileceği konusu değil. İnsanların en çok şikâyet ettiği ve endişelendiği şey, basit görünen bazı görevleri tamamlamaktır.
Komut satırı ve betik araçlarının "çerçevesini" kullanan, orta düzeyde kapsamlı herhangi bir betik, toplu komutların, Windows Betik Ana Bilgisayarının ve bağımsız yürütülebilir dosyaların bir kombinasyonunu gerektirir. Her betik yürütme, veri isteme, ayrıştırma ve döndürme için farklı kurallar kullanır.
CMD.EXE'deki zayıf değişken desteği, tutarsız arayüzler ve Windows ayarlarına sınırlı erişim, başka bir zayıflıkla birleşince, komut satırı komut dosyalarının uygulanmasını ve kullanılmasını daha da zorlaştırıyor. Buradaki 'diğer zayıflığın' ne olduğunu merak ediyor olabilirsiniz? Lütfen düz metin olduğuna dikkat edin. Bu teknolojilerde her şey metin biçimindedir. Bir komutun veya betiğin çıktısı metindir ve bir sonraki komutun girdisi olarak işlev görecek şekilde ayrıştırılıp yeniden biçimlendirilmesi gerekir. Bu, PowerShell'in tüm geleneksel kabuklardan aldığı temel başlangıç noktasıdır.
Bu bölümde tanıtılan üç kavram, PowerShell'in temelini oluşturan temel kavramları anlamak için gereken temel bilgilerdir. PowerShell komutlarına yaklaşırken daha gelişmiş kavramları öğrenmek ve bunlarda ustalaşmak için daha fazla zaman harcamanız gerekecektir.
PowerShell, Windows 10, Windows 7, Windows Server 2008 R2 ve daha yeni Windows sürümlerinde varsayılan olarak yüklüdür. PowerShell'in yeni sürümleri yeni özellikler ve "cmdlet'ler" (Microsoft'un PowerShell komutları için kullandığı terim - "command-lets" olarak okunur) ekler ve Windows Management Framework'ün (WMF) ilgili sürümüyle birlikte yüklenir.
Şu anda önerilen en son sürüm WMF 5.1'dir. Bazı durumlarda WMF sürümünün yanı sıra işletim sistemine bağlı olarak bazı yeni özellikler de gelmektedir. Örneğin, Windows 8 ve Windows Server 2012, belirli bir TCP/IP bağlantı noktasına bağlantıyı test etmenize olanak tanıyan Test-NetConnection cmdlet'ini destekler, ancak bu cmdlet, WMF'nin en son sürümünü çalıştırırken bile Windows 7'de kullanılamaz.
Çoğu Windows sisteminde, kullanıcıların kullanabileceği iki PowerShell ortamı bulunur: PowerShell konsolu ve PowerShell ISE (Tümleşik Komut Dosyası Ortamı). PowerShell konsolu geleneksel bir komut satırı gibi görünür, ancak arkasında PowerShell'in tüm işlevleri bulunur. Değişken adları, döngüler, komut otomatik tamamlama ve borulama PowerShell konsolundan kullanılabilir.
Daha gelişmiş kullanımlar (örneğin betik oluşturma) için PowerShell ISE, PowerShell kodu oluşturmanıza ve test etmenize yardımcı olmak amacıyla komut otomatik tamamlama, kod vurgulama ve Microsoft'un Intellisense kod tamamlama yeteneklerini sağlar. PowerShell ISE ayrıca sekmeli gezinmeyi kullanarak birden fazla PowerShell betiğiyle aynı anda çalışmanıza olanak tanır.
PowerShell komutlarının temeli cmdlet'tir. Microsoft, PowerShell'de cmdlet'ler oluştururken çeşitli tasarım stratejileri benimsedi.
Birincisi, cmdlet adlarını kolayca çıkarabilme veya en azından onları daha keşfedilebilir kılma yeteneğidir. PowerShell komutları veya cmdlet'leri, standartlaştırılmış söz dizimiyle kullanımı daha kolay olacak şekilde tasarlanmıştır ve bu sayede komut satırı arayüzünden komut dosyası oluşturmak daha kolaydır.
Cmdlet'ler Get-Service, Stop-Service veya Import-Csv'deki gibi Verb-Noun biçimini kullanır. Bir cmdlet isminin fiil kısmı, ismin üzerinde gerçekleştirilen eylemi belirtir. Genellikle, bilgi almak için kullanılan cmdlet'lerin adlarında Get fiili bulunur ; örneğin Get-Process veya Get-Content . Bir şeyi düzenlemek için kullanılan komut genellikle Set fiiliyle başlar , bir yere yeni bir varlık eklemek için kullanılan komut ise genellikle Add veya New fiiliyle başlar .
İkincisi, PowerShell'de yaygın olarak kullanılan parametrelere de standartlaştırılmış isimler verilir. Örneğin, -ComputerName parametresi cmdlet'in bir veya daha fazla uzak bilgisayarda yürütülmesine olanak tanır. -Kimlik bilgisi, belirli bir kullanıcı olarak bir komutu çalıştırmak için kullanıcı kimlik bilgilerini içeren bir kimlik doğrulama nesnesi sağlamak için kullanılır.
Tuş vuruşlarını azaltmak ve komutun genel uzunluğunu kısaltmak için hem cmdlet'ler hem de parametreler için takma adlar kullanabilirsiniz (birden fazla komutu birbirine bağladığınızda çok kullanışlıdır). Bu takma adlar her zaman standart adlandırma kurallarını kullanmasa da, yine de geleneksel komut satırı yardımcı programlarını yansıtır.
PowerShell'de DIR, CD, DEL ve CLS gibi takma adlar sırasıyla Get-ChildItem, Set-Location, Remove-Item ve Clear-Host cmdlet'lerine karşılık gelir. Parametre takma adları iki şekilde çalışabilir: cmdlet tarafından sağlanan önceden tanımlanmış bir takma adı kullanabilirler veya cmdlet'in desteklediği parametreler arasında benzersiz bir eşleşme oluşturmak için yeterli sayıda karakter girilerek takma ad verilebilirler.
Çoğu sistem yöneticisi, işleri sırasında dosyaları ve klasörleri değiştirmek zorundadır; ister bir klasörü sunucudaki başka bir yere taşısın, ister günlük dosyalarını arşivlesin veya büyük dosyaları arasın. Aynı işlemlerin birçok dosya üzerinde tekrarlanması durumunda, bunları otomatikleştirmek için PowerShell kullanmak etkili bir zaman tasarrufu çözümü olacaktır.
Bilgisayar tarihinin eski dönemlerinde, bir yöneticinin dosya ve dizinleri bulmak için öğrendiği ilk komut satırı araçlarından biri dir komutuydu. Dir, belirtilen dizinde bulunan dosyaları ve dizinleri listeler.
PowerShell'de Get-ChildItem Cmdlet'i biçiminde benzer bir komut vardır . Get-ChildItem, bir dizindeki dosyaların listesini hızlı bir şekilde oluşturmanıza, böylece dosyaları bir boru komutuyla düzenleyebilmenize veya çıktıyı bir değişkene atayabilmenize olanak tanır.
Get-ChildItem, -Path parametresini kullanarak veya cmdlet adından hemen sonra , boru hattı üzerinden bir yol sağlanarak basitçe kullanılabilir . Get-ChildItem tarafından döndürülen yanıtı ayarlamak için cmdlet tarafından sağlanan bazı parametrelerin dikkate alınması gerekir.
-Filter parametresi dosyaları arayabileceğiniz bir yoldur. Varsayılan olarak, Get-ChildItem yalnızca hedef dizinin doğrudan alt öğelerini döndürür. Bu işlevsellik , geçerli dizinde bulunan dizinleri yinelemeli olarak arayan ek -Recurse seçeneği kullanılarak genişletilebilir .
PowerShell 4.0'da Get-ChildItem , –File veya –Directory anahtarını kullanarak sonuçları dosyalarla veya dizinlerle sınırlama olanağı ekledi . PowerShell'in önceki sürümlerinde bu belirlemeyi yapmak için PSIsContainer özelliğini filtreleyerek sonucu Where-Object'e geçirmek gerekiyordu. C:Users'da bulunan klasörleri döndürmek için kullanılan her iki tekniğin bir örneği burada gösterilmektedir:
Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}
Gizli veya sistem dosyalarını tespit etmek için -Force kullanılmalıdır . PowerShell 4.0 ve sonraki sürümlerinde Get-ChildItem, sırasıyla -Hidden, -ReadOnly ve –System kullanılarak yalnızca gizli, salt okunur veya sistem dosyalarını döndürmek için de kullanılabilir . Önceki sürümlerde, Where-Object kullanılarak Mode özelliği filtrelenerek benzer işlevsellik elde edilebiliyordu:
Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}
Dosyanın mevcut olup olmadığını kontrol edin
Normalde dosyalarla çalışırken bilmemiz gereken tek şey dosyanın var olup olmadığı veya dizin yolunun geçerli olup olmadığıdır. PowerShell bunu yapmak için Test-Path biçiminde bir cmdlet sağlar ve bu cmdlet true veya false değerini döndürür.
Test-Path, belirli bir dosyayı kopyalamaya veya silmeye çalışmadan önce önlem amaçlı kullanılır.
Dosyaları kopyala, taşı ve sil
Kopyalama Öğesi: -Path parametresiyle belirtilen bir konumdan, -Destination seçeneğiyle belirtilen konuma bir veya daha fazla dosya veya dizini kopyalar.
Öğeyi Taşı: Bir dosyayı veya klasörü taşıyın.
Dizin yapıları kopyalanırken veya taşınırken, cmdlet'in dizin ve içerikleri üzerinde eylemi gerçekleştirmesini sağlamak için -Recurse kullanılmalıdır. Bazı durumlarda, örneğin salt okunur bir dosyanın kopyalama işlemiyle üzerine yazılması durumunda -Force komutuna ihtiyaç duyulur .
Remove-Item: Dosyayı, klasörü sil.
Salt okunur bir dosyayla karşılaşıldığında -Force , bir dizini ve içeriğini silerken ise -Recurse anahtarı kullanılmalıdır.
PowerShell -WhatIf ve -Confirm Kullanımı
Ciddi, toplu silme işlemi yapmadan önce -WhatIf komutunu kullanın . -WhatIf, bir betik veya komutun çalıştırılması durumunda ne olacağını, bunun önemli iş verilerinin silinmesinin herhangi bir olumsuz etkisi olup olmayacağını görmenizi sağlar. Ayrıca belirtmekte fayda var ki -WhatIf sadece dosya işlemleriyle sınırlı değildir, PowerShell'de de yaygın olarak kullanılır.
Manuel olarak çalıştırmayı planladığınız veya daha kötüsü, manuel olarak çalıştırılan bağımlı komutlara sahip betikler için -Confirm kullanmayı düşünün . Bu, eylem gerçekleşmeden önce kullanıcı etkileşimi istemenize olanak tanır.
PowerShell Komut Dosyaları = Steroidler Üzerindeki Toplu Dosyalar
PowerShell'in kendisi .NET dilinde yazılmıştır ve büyük ölçüde .NET Framework'e dayanmaktadır. Bu nedenle PowerShell, nesne yönelimli bir yardımcı program ve betik dili olarak tasarlanmıştır. PowerShell'deki her şey tam işlevli bir .NET Framework nesnesi olarak ele alınır. Belirli bir nesne türünün özelliklerini ve yöntemlerini kullanarak kullanılabilecek bir nesne kümesi veren komut. Bir komutun çıktısını başka bir komutun çıktısına aktarmak istediğinizde, PowerShell yalnızca ilk komut satırının metin çıktısını değil, nesnenin kendisini aktarır. Bu, bir sonraki komuta, boru hattındaki nesnenin tüm özelliklerine ve yöntemlerine tam erişim sağlar.
Her şeyi bir nesne olarak ele almak ve komutlar arasında nesneleri kabul edebilme yeteneği, komut satırı yardımcı programları için büyük bir teorik değişikliktir. Bununla birlikte, PowerShell hala geleneksel bir kabuk yardımcı programı gibi çalışmaktadır. Komut satırından komutlar, betikler ve yürütülebilir dosyalar yazılabilir ve çalıştırılabilir ve sonuçlar metin biçiminde görüntülenir. Windows .CMD ve .BAT dosyaları, VBScript'ler, JScript'ler ve CMD.EXE içinde çalışan yürütülebilir dosyaların tümü PowerShell'de çalışmaya devam ediyor. Ancak nesne yönelimli olmadıkları için PowerShell'de oluşturulan ve kullanılan nesnelere tam erişimleri yoktur. Bu eski betikler ve yürütmeler her şeyi metin olarak ele almaya devam edecek, ancak PowerShell'i bir dizi başka teknolojiyle birleştirebilirsiniz. Eğer mevcut betiklerin bir kerede dönüştürülmesi mümkün değilse, PowerShell'i kullanmaya başlamak istiyorsanız bu çok önemli bir noktadır.
Cmdlet'ler davranışlarını değiştirmek için parametre kabul edebilir. Bir Cmdlet veya fonksiyonu çalıştırırken, her PowerShell komutunun neyi, ne zaman, nerede ve nasıl çalıştıracağını belirtmek için parametre değerleri sağlayabilirsiniz.
Örneğin, Get-Process işletim sisteminizde çalışan tüm işlemleri alır ve listeler:
Peki ya sadece belirli bir ilerleme kaydetmek istiyorsanız? Bunu parametreler kullanarak yapabilirsiniz. Örneğin, tüm Slack süreçlerini almak için Get-Process Cmdlet'iyle birlikte Name parametresini kullanabilirsiniz:
Get-Process -Name Slack
O zaman sadece "slack" isimli işlemleri göreceksiniz:
İpucu : Bazı parametreler "konumsaldır", yani adları isteğe bağlıdır. Bu durumda Get-Process -Name Slack ve Get-Process Slack aynı görevi gerçekleştirir.
Her Cmdlet farklı tipte parametreleri kabul edecektir. Cmdlet'in kabul edilen parametrelerini SYNTAX bölümünde görmek için Get-Help komutunu kullanın.
Get-Help Get-Process
Verilen Cmdlet'i çalıştırmanın tüm olası yollarının bir listesini göreceksiniz:
Bu durumda Get-Process Cmdlet'i Name, Id, ComputerName, Module, FileVersionInfo ve diğer ortak parametreleri kabul eder. Buradaki sembollerin anlamı:
Sembol |
İsim |
Anlam |
---|---|---|
Davul |
Parametre girişi kabul etmiyor |
|
- |
Tire |
Parametre adını belirtin |
<> |
kıvırcık parantezler |
Metin için yer tutucu |
[] |
Parantez |
Parametre bir veya daha fazla değeri kabul edebilir. |
{} |
kıvırcık parantezler |
Parametre bir dizi değeri kabul eder. |
Parametreler, dize, tamsayı, boolean veya DateTime gibi ihtiyaç duydukları veri türünü gösterecek bir dizi değer kabul eder. Örneğin, aşağıdaki komut:
Get-Process [[-Name] ]
..., Ad parametresinin bir veya daha fazla dize değerini kabul ettiği anlamına gelir , oysa bu komut:
Get-Process -Id
... Id parametresinin bir veya daha fazla tamsayı değerini kabul ettiği anlamına gelir.
Önceki Get-Process örneği sonuçları daraltmak için Name parametresini kullandı. Ancak, bunu daha spesifik bir işleme daraltmak istiyorsanız, sözdiziminde belirtildiği gibi bir tamsayı gerektiren ID parametresini kullanabilirsiniz.
Get-Process -Id 3016
Daha sonra listede sadece bir işlem göreceksiniz:
PowerShell tüm verileri nesne olarak ele alır. Bir betik oluşturmak için bu nesneler, boru simgesi (|) ile birbirine bağlanan bir dizi Cmdlet veya fonksiyondan geçer. Verimli bir betik için doğru Cmdlet'leri seçmek ve bunları bir işlem hattı kullanarak mantıksal bir sıraya bağlamak önemlidir.
Diyelim ki bir klasörde en çok yer kaplayan ilk 5 dosyayı sıralayıp görüntüleyen bir script oluşturuyorsunuz. Bir dosya sıralama betiği oluşturmanın daha etkili yolları da vardır, ancak aşağıdaki basit olanı anlaşılması kolaydır:
Bunu PowerShell'de yapmak için aşağıdaki gibi görünen bir işlem hattı kullanın:
Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
| Select-Object -First 5 | Format-Table Name, Length -AutoSize
Artık çalışan bir boru hattımız olduğuna göre, onu bir PS1 komut dosyası olarak kaydedebilir, böylece her kullandığınızda onu içe aktarmanıza gerek kalmaz.
PS1 dosyası oluşturmanın en basit yolu, betiğinizi Not Defteri'ne yapıştırmak ve dosyayı .ps1 uzantısıyla kaydetmektir.
PS1 dosyasını oluşturduktan sonra, ./ScriptName.ps1 komutunu çalıştırarak bunu PowerShell'de kullanabilirsiniz :
İpucu : Eğer bir izin hatası alırsanız, en hızlı çözüm betiğinizi çalıştırırken PowerShell'i yönetici haklarıyla çalıştırmaktır.
Tebrikler! Artık bir PowerShell PS1 betiği oluşturabilirsiniz.
Yeni teknolojinin harikalarını okumak ve anlamak bir şey, ama onu gerçekten kullanmak başka bir şey! Bu makalenin geri kalanında, yeteneklerini ve kullanımını göstermek için bir PowerShell betiği geliştireceğiz.
DIR , CMD.EXE'deki en yaygın komutlardan biridir . Bu komut, bir üst dizinde bulunan tüm dosyaları ve alt dizinleri gösterir (Şekil 1'de gösterildiği gibi). Her nesnenin adının yanı sıra, son güncellemenin tarih ve saati ve her dosyanın boyutu da sağlanan bilgiler arasında yer alıyor. DIR ayrıca dizindeki tüm dosyaların birleşik boyutunu, toplam dosya sayısını ve toplam alt dizin sayısını da görüntüler.
Şekil 1
PowerShell'de DIR'i çalıştırmak da Şekil 2'deki gibi bir dizin listesi üretir, ancak biraz farklıdır. PowerShell'in DIR komutu yoktur, bunun yerine aynı işlevi gerçekleştiren Get-ChildItem komutu vardır. PowerShell'de DIR, Get-ChildItem için bir takma addır. Bu yazıda takma adlara girmeyi düşünmüyorum. PowerShell'deki DIR'i Get-ChildItem'ın kısaltması olarak düşünebilirsiniz.
PowerShell'deki DIR, yukarıda belirtilen bilgilerin çoğunu sağlar: dosya ve klasörlerin listesi, bunların son güncellendiği tarih ve saat ve her dosyanın boyutu. Ancak CMD.EXE'deki DIR'in sağladığı özet bilgilerden yoksundur: dizindeki tüm dosyaların toplam boyutu, toplam dosya sayısı ve toplam alt dizin sayısı.
Şekil 2
Örnek senaryo için CMD.EXE DIR komutunu simüle eden bir PowerShell betiği oluşturmanız gerekecektir. Aşağıda bir senaryonun en temel kısımlarını açıklayacağım.
DIR.PS1: Başlık
PowerShell betiği, .PS1 uzantılı düz metin dosyasındaki PowerShell komutlarından oluşur. DIR yerine DIR.PS1 adında bir metin dosyası kullanacaksınız.
Betiği çalıştırmak için PowerShell ekranına aşağıdaki komutu yazın:
.DIR.PS1 X:Folder
Burada X sürücü bölümünün harfidir (örneğin C, D, E) ve Klasör klasör adıdır.
Sürücü bölümünüz hakkında bazı bilgiler edinmek istiyorsanız, Windows Yönetim Araçları'nı (WMI) kullanmanız gerekecektir. WMI'nin ayrıntıları bu makalenin kapsamı dışında olduğundan burada bunlara değinmeyeceğiz. Ancak aşağıdaki PowerShell kodu WMI yardımına ihtiyaç duymadan da anlaşılabilecek kadar kolaydır. Get-WmiObject komutuyla kullanmak üzere bir “$filter” değişkeni oluşturabilirsiniz. Bu filtre değişkeni, Get-WmiObject komutuna yalnızca belirli bir sürücü hakkında bilgi istediğinizi söyler. Get-WmiObject komutunun sonucu $volInfo adlı bir değişkende saklanır. Unutmayın, PowerShell'de her şey bir nesnedir; $volInfo artık Get-WmiObject'ten döndürülen bir sonuç nesnesidir.
$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter
Artık nesneyle ilişkili tüm nesnelere ve yöntemlere erişebilirsiniz. Birim seri numarasına VolumeSerialNumber özelliği aracılığıyla erişilebilir. Dönen bilgi 8 karakterlik bir dizedir. Ama genelde bunu tireyle ayrılmış dört ayrı sayı olarak biçimlendirmek istersiniz. Aşağıdaki satırdaki gibi benzer şekilde yapılabilir. İlk satırın sonundaki tire, PowerShell'de satır devam karakteridir. Temel olarak PowerShell'e satırın kesik olmadığını ancak bir sonraki satırı içerdiğini söyler. Kod yazarken satırları ayırmaya gerek yoktur, ancak genişliği azaltmak ve kodun daha rahat okunmasını sağlamak için bunu yapabilirsiniz.
$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)
Artık $volInfo nesnesine sahip olduğunuza göre, DIR başlık bilgisini ekrana yazabilirsiniz. Sürücünün adı yoksa ekrana yazılan metin, sürücünün adı olması durumunda yazılan metinden biraz farklı olacaktır. VolumeName özelliğinin boş bir dize olup olmadığını kontrol etmek için basit bir If-Else ifadesi kullanılır. Write-Host komutu, ekrana tek tek komut satırları yazmak için kullanılır.
If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")
Write-Host komutunun başında ve sonunda bulunan “ `n ” karakteri, metnin öncesine ve sonrasına yeni satırlar eklemek için kullanılır. Write-Host komutu her satırın sonuna yeni bir satır ekler. Yani " n " nin etkisi metin satırından önce ve sonra boş satırlar oluşturmaktır.
If komutundaki “-eq” ifadesini fark ettiniz mi? Eşitlik karşılaştırma operatörüdür. Aşağıdaki tablo size tüm karşılaştırma operatörlerini gösterecektir:
-eq, -ieq | Karşılaştır |
-ne, -ine | Karşılaştırma eşit değildir |
-gt, -igt | Daha büyük olanı karşılaştır |
-ge, -ige | Büyük veya eşit olanları karşılaştırın |
-lt, -ilt | Daha küçük olanı karşılaştırın |
-le, -ile | Daha az veya eşit olanı karşılaştırın |
Karşılaştırma operatörlerinden önce gelen -i karakteri, operatörün büyük/küçük harfe duyarlı olmadığını belirtir.
Şekil 3: Şu anda sahip olduğunuz betiğin çıktı verileri
DIR.PS1: Dosya/klasör listesi
Artık bu klasörün içeriğini ve özelliklerini görüntülemeye hazırsınız. Yapılacak ilk şey PowerShell Get-ChildItem komutunu çağırarak bir dizi dosyayı almak ve bunları parametre olarak betiğe geçirmektir. Get-ChildItem komutu, yalnızca dosya ve klasör nesnelerinin adlarını değil, aynı zamanda bu nesneleri sıralamak için doğrudan Sort-Object komutuna aktarır. Varsayılan olarak, Sort-Object komutu nesneleri Name özelliğine göre sıralar. Yani başka hiçbir parametreyi tanımlamanıza gerek yok. Sıralanmış nesne kümesi daha sonra $items adlı bir değişkende saklanacaktır.
$items = Get-ChildItem $args[0] | Sort-Object
Bir dosya ve klasör nesneleri koleksiyonunuz olduğunda, bunlar arasında döngü yapmanız ve uygun özellikleri görüntülemeniz gerekir. Bunun için kullanılan komut ForEach'tir. Her dosya veya klasör için son güncelleme tarihi ve saati, adı, uzunluğu veya dosya boyutu gibi özellikler gösterilecektir. Parantez içindeki garip görünümlü dizeler .NET dize biçimi kodlarıdır. Alanları sola/sağa hizalamak ve tarih, saat, sayı biçimlendirmek için kullanılır. Bu dize biçimi kodlarını anlamak çok önemli değildir, çünkü bunlar bu betiğin doğası için elzem değildir.
If komutu bir nesnenin dizin olup olmadığını belirlediğiniz yerdir. Mode niteliğinin ilk karakteri “d” ise, nesne bir dizindir. Dizinler için yazılan kodlar, dosyalar için yazılan kodlardan sıklıkla farklı olduğundan, iki kez kontrol etmeniz gerekir.
If ifadesinin içindeki $totalDirs++ satırına dikkat edin. Bu, klasör sayısının takibinden sorumlu sayaçtır. Benzer şekilde, tüm dosyaların toplam boyutunu takip etmek için kullanılan $totalFiles adında bir değişken vardır. Bu değerler her zaman yürütme sırasında hesaplanır. Ancak bunlar yalnızca dosya listeleme işlemi tamamlandığında görüntülenir.
ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}
Şekil 4: Güncellenen betiğin çıktı verilerini görüntüler.
DIR.PS1: Altbilgi
Geriye sadece bu sürücü bölümündeki toplam dosya sayısını, klasörleri, tüm dosyaların toplam boyutlarını ve boş alanı ekrana yazmak kalıyor. Bunu yapmak için önceki bölümde oluşturulan sayaç değişkenlerini ($totalFiles, $totalDirs, $totalSize) kullanmanız gerekecektir. Scriptin başında oluşturulan $volInfo değişkeninden ne kadar boş alan olduğunu öğrenebilirsiniz.
Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")
Şekil 5: Komut dosyasının tam çıktı verilerini görüntüler.
Tahminler ve geliştirmeler yapılabilir
Oluşturduğunuz betik CMD.EXE DIR komutuyla neredeyse aynı çıktıyı üretse de, bilmeniz gereken bazı uyarılar ve yapılabilecek bazı geliştirmeler var.
Tutarlılık için dosyaları toplu olarak yeniden adlandırmak veya uygulamaları otomatik olarak başlatmak gibi hemen hemen her şeyi otomatikleştirmek için PowerShell'i kullanabilirsiniz. Nasıl çalıştığını görmek için birkaç basit Windows PowerShell betiği yazalım.
Not : Komut dosyasını yürütürken yürütme politikasıyla ilgili bir hatayla karşılaşırsanız, "Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass" komutunu çalıştırarak komut dosyasının geçici olarak yürütülmesine izin vermeniz gerekebilir.
Bir klasördeki dosyaları toplu olarak yeniden adlandırma
Bilgisayarınızdaki dosyaları kopyalamak, taşımak ve silmek için PowerShell'i kullanabilirsiniz. Belirli bir dosya türündeki dosyaları toplu olarak yeniden adlandırabilirsiniz. Örneğin, dosya adlarındaki "eskico" önekini "yenico" ile değiştirerek birden fazla metin dosyasının adını nasıl değiştirebileceğiniz aşağıda gösterilmektedir:
Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}
Yukarıdaki betikte ".txt" dosya uzantısı filtresidir. Farklı dosya türlerini aramak için bunu .jpg, .docx vb. olarak değiştirebilir ve ayarlayabilirsiniz.
Uygulamayı otomatik başlat
Her gün aynı uygulama setini açıyorsanız, bunları tek tıklamayla başlatacak bir PowerShell betiği yazabilirsiniz:
#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"
Komut dosyasını bir Not Defteri dosyasına yapıştırın ve LaunchFavoriteApps.ps1 ismiyle kaydedin. Daha sonra, scriptte listelenen tüm uygulamaları başlatmak için dosyaya çift tıklamanız yeterli olacaktır.
Önemli dosyaları bir yedekleme konumuna kopyalayın
Aşağıdaki scripti kullanarak önemli dosyalarınızı periyodik olarak bir yedekleme konumuna yedekleyebilirsiniz. Gerektiğinde kaynak ve hedef yollarını değiştirdiğinizden emin olun:
#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse
Her gün indirilen çok sayıda dosya türü nedeniyle, İndirilenler klasörü etrafa dağılmış her türlü dosyayla hızla karışabilir. Bunu düzeltmek için, her günün sonunda indirilen dosyaları dosya türüne göre klasörlere sıralayan bir PowerShell betiği yazabiliriz.
Yeni bir Notepad dosyası açın ve aşağıdaki betiği yapıştırın. Komut dosyasındaki kaynak klasör yolunu İndirilenler klasör yoluna uyacak şekilde değiştirdiğinizden emin olun:
# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"
Dosyayı kaydetmek için Dosya > Farklı Kaydet'e tıklayın ve dosya adı olarak OrganizeDownloadsFolder.ps1 girin . Daha sonra Kayıt Türü'ne tıklayın ve Tüm Dosyalar'ı seçin . Betiği çalıştırmak için OrganizeDownloadsFolder.ps1 dosyasına çift tıklayın .
Elbette, senaryolaştırma otomasyon sürecinin bir parçasıdır. İkinci kısım ise betiğin görevi yerine getirecek şekilde otomatik olarak çalıştırılabilmesini sağlamaktır. Bunu yapmak için, betiği günlük olarak veya ihtiyaç duyulduğunda çalıştırmak üzere zamanlanmış görevler oluşturabiliriz.
PowerShell'i açın, ardından aşağıdaki betiği kopyalayıp yapıştırın ve Enter'a basın . 'J:\OrganizeDownloadsFolder.ps1' ifadesini OrganizeDownloadsFolder.ps1 betiğinizin tam dosya yoluyla değiştirdiğinizden emin olun .
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"
İşlemi tamamladıktan sonra Enter'a basın . Betik, dosya düzenleme betiğini her gün saat 17:00'da çalıştırmak için Görev Zamanlayıcı'da zamanlanmış bir görev oluşturacaktır. Eğer farklı bir zaman tercih ederseniz yukarıdaki scriptte bunu değiştirebilirsiniz.
Ayrıca, birincil sürücünüzdeki boş alanınız dolduğunda sizi uyaran bir alan izleme betiği, PDF belgelerinin toplu halde parola ile korunması ve hatta resimler klasörünüzden canlı duvar kağıtları uygulanması gibi diğer günlük görevleri otomatikleştirmek için de PowerShell'i kullanabilirsiniz.
PowerShell güçlü bir betik dili ve yardımcı program olmasına rağmen, özellikle .NET Framework ortamına aşina değilseniz, onu kavramak ve kullanmak çok az zaman alır. Bu makalenin ve örnek betiğin PowerShell'i anlamak isteyen herkes için faydalı olmasını umuyorum. Ancak örnekte oluşturulan script oldukça basittir. Daha karmaşık uygulamalara daha iyi hizmet verebilmek için daha eksiksiz bir şekilde inşa edilebileceğine ve geliştirilebileceğine inanıyoruz.
Microsoft şu anda kullanıcıları yeni ürün ve hizmetlere dönüştürmede zorluk yaşıyor.
Hepimizin bilgisayarlarımızda otomatikleştirmek istediğimiz tekrarlayan görevlerimiz var. Neyse ki, bu sorunu üstlenebilecek ve zamanınızı daha verimli kullanmanıza yardımcı olabilecek pek çok üçüncü taraf Windows uygulaması mevcut.
Yanlış şarj cihazı seçimi cihazınızın yavaş şarj olmasına hatta bozulmasına neden olabilir. Ve bu kadar çok seçenek ve benzer ürün varken, doğru ürünü bulmak her zamankinden daha zor.
Meta'nın sosyal medya uygulamalarını düzenli olarak analiz ederek yaklaşan özellikleri tespit eden Alessandro Paluzzi'ye göre Instagram, diğer Instagram gönderilerine yapılan yorumları Threads'te paylaşmanın bir yolunu sunabilir.
Apple Intelligence'ın piyasaya sürülmesi birçok kişiyi heyecanlandırdı ancak hâlâ geliştirilebilecek alanlar var. Apple, cihazı daha da iyi hale getirmek için bazı özellikler ekleyebilir.
Facebook Messenger şu anda en çok kullanılan mesajlaşma uygulaması, peki sana en çok kimin mesaj attığını biliyor musun? Aşağıdaki makale, okuyucuların Messenger'da en çok kimin mesajlaştığını görmelerine yardımcı olacak.
Adobe'nin Lens Bulanıklığı aracı, fotoğraflarınızı incelemenizi kolaylaştırır, fotoğraflarınıza derinlik ve odak kazandırır.
iOS 17.4, Apple Podcasts'e canlı çeviri özelliğini ekliyor. Dinlediğiniz podcast'in içeriği için hangi çeviri dillerini kullanmak istediğinizi seçebiliriz.
ABD'li iki şirket Kronos Advanced Technologies ve Yasheng Group, Çin ile arasındaki farkı kapatmak amacıyla onlarca yıl boyunca şarj edilmeden çalışabilen nükleer piller geliştirmek için birlikte çalışıyor.
Son derece tehlikeli bir zehre sahip olmasına rağmen ağaç yılanı, düşmanının gözlerine ve kafasına attığı "cennetsel" gagalamalara dayanmaktan başka bir şey yapamaz.
Yapay zeka sohbet robotları, kullanıcıların web siteleriyle etkileşim kurma biçimini tamamen yeniden şekillendiriyor ve bu süreçte bazı web sitesi türlerini geçersiz kılıyor.
Yapay zeka destekli fotoğraf geliştirme araçları, tek bir tıklamayla görüntülerinizi iyileştirmeyi vaat ediyor. Ancak bu araçlar her ne kadar oldukça kullanışlı olsa da kullanımında bazı sorunlar yaşanabiliyor.
Jax DTCL 8. sezonda bir taşıyıcı olmasına rağmen Dövüşçü olmasına rağmen yetenekleri zamanla hasarı artırıyor ve bu da onun kolayca taşıyıcıya dönüşmesinin temel sebebi.
Netflix'te yeni yayınlanan When Life Gives You Tangerines filmi, yürek ısıtan hikayeleriyle hayranlarının ilgisini çekti.
Gelecekle ilgili durumlar ve aşağıda yer alan güzel sözler, her insanın daha fazla çaba sarf etmesi için motivasyona sahip olmasına yardımcı olacak güçlü bir ilham kaynağı olacaktır.
Akıllı telefonların icadından bu yana uzun zamandır tek seçenek düz ekran telefonlardı. Ancak bunlardan sıkıldıysanız ve farklı bir şey denemek istiyorsanız katlanabilir bir telefon satın alabilirsiniz.
Google Pixel telefonlarda rahatsız etmeyin modunun nasıl ayarlanacağı aşağıda açıklanmıştır.