Dosya ve klasörlerle çalışma
PowerShell sürücülerinde gezinmek ve bu sürücülerdeki öğeleri düzenlemek, Windows disk sürücülerindeki dosya ve klasörleri düzenlemeye benzer. Bu makalede, PowerShell kullanarak belirli dosya ve klasör işleme görevleriyle nasıl başa çıkılacağı açıklanır.
Klasör içindeki tüm dosya ve klasörleri listeleme
kullanarak Get-ChildItem
tüm öğeleri doğrudan bir klasör içinde alabilirsiniz. Gizli öğeleri veya sistem öğelerini görüntülemek için isteğe bağlı Force parametresini ekleyin. Örneğin, bu komut PowerShell Sürücüsünün C:
doğrudan içeriğini görüntüler.
Get-ChildItem -Path C:\ -Force
Komutu yalnızca doğrudan kapsanan öğeleri listeler; örneğin unix kabuğunda cmd.exe
veya ls
içinde komutunu kullanabilirsinizdir
. Alt klasördeki öğeleri göstermek için Özyinele parametresini belirtmeniz gerekir.
Aşağıdaki komut sürücüdeki C:
her şeyi listeler:
Get-ChildItem -Path C:\ -Force -Recurse
Get-ChildItem
öğeleri Path, Filter, Include ve Exclude parametreleriyle filtreleyebilir, ancak bunlar genellikle yalnızca adı temel alır. kullanarak Where-Object
öğelerin diğer özelliklerine göre karmaşık filtreleme gerçekleştirebilirsiniz.
Aşağıdaki komut, Program Files klasöründe en son 1 Ekim 2005'ten sonra değiştirilen ve ne 1 megabayttan küçük ne de 10 megabayttan büyük olan tüm yürütülebilir dosyaları bulur:
Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe |
Where-Object -FilterScript {
($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)
}
Dosya ve klasörleri kopyalama
Kopyalama işlemi ile Copy-Item
yapılır. Aşağıdaki komut PowerShell profil betiğinizi yedekler:
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}
Komut, Test-Path
profil betiğinin mevcut olup olmadığını denetler.
Hedef dosya zaten varsa kopyalama girişimi başarısız olur. Önceden var olan bir hedefin üzerine yazmak için Force parametresini kullanın:
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak') -Force
}
Bu komut, hedef salt okunur olduğunda bile çalışır.
Klasör kopyalama aynı şekilde çalışır. Bu komut klasörü C:\temp\test1
yinelemeli olarak yeni klasöre C:\temp\DeleteMe
kopyalar:
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe
Ayrıca, bir öğe seçimini de kopyalayabilirsiniz. Aşağıdaki komut, içinde C:\data
herhangi bir yerde bulunan tüm .txt
dosyaları klasörüne C:\temp\text
kopyalar:
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text
Dosyaları kopyalamak için ve robocopy.exe
gibi xcopy.exe
yerel komutları çalıştırmaya devam edebilirsiniz.
Dosya ve klasör oluşturma
Yeni öğeler oluşturmak tüm PowerShell sağlayıcılarında aynı şekilde çalışır. Bir PowerShell sağlayıcısında birden fazla öğe türü varsa (örneğin, FileSystem PowerShell sağlayıcısı dizinler ve dosyalar arasında ayrım gerçekleştirir), öğe türünü belirtmeniz gerekir.
Bu komut yeni bir klasör C:\temp\New Folder
oluşturur:
New-Item -Path 'C:\temp\New Folder' -ItemType Directory
Bu komut yeni bir boş dosya oluşturur C:\temp\New Folder\file.txt
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File
Önemli
Bir klasör oluşturmak için komutuyla Zorla anahtarını kullanırken ve klasör zaten var olduğunda, klasörün üzerine yazılmıyor veya klasör değiştirilmiyor.New-Item
Yalnızca mevcut klasör nesnesini döndürür. Ancak, zaten var olan bir dosyada kullanıyorsanız New-Item -Force
, dosyanın üzerine yazılır.
Klasör içindeki tüm dosya ve klasörleri kaldırma
kullanarak Remove-Item
kapsanan öğeleri kaldırabilirsiniz, ancak öğe başka bir şey içeriyorsa kaldırma işlemini onaylamanız istenir. Örneğin, diğer öğeleri içeren klasörü C:\temp\DeleteMe
silmeye çalışırsanız, PowerShell klasörü silmeden önce sizden onay ister:
Remove-Item -Path C:\temp\DeleteMe
Confirm
The item at C:\temp\DeleteMe has children and the Recurse parameter wasn't
specified. If you continue, all children will be removed with the item. Are you
sure you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help
(default is "Y"):
Kapsanan her öğe için sorulmasını istemiyorsanız Recurse parametresini belirtin:
Remove-Item -Path C:\temp\DeleteMe -Recurse
Yerel klasörü sürücü olarak eşleme
Komutunu kullanarak New-PSDrive
yerel klasörü de eşleyebilirsiniz. Aşağıdaki komut, yalnızca PowerShell oturumundan görülebilen, yerel Program Files dizininde kök dizinine sahip bir yerel sürücü P:
oluşturur:
New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem
Ağ sürücülerde olduğu gibi, PowerShell içinde eşlenen sürücüler de PowerShell kabuğuna hemen görünür. Dosya Gezgini görünür eşlenmiş bir sürücü oluşturmak için Persist parametresini kullanın. Ancak, Kalıcı ile yalnızca uzak yollar kullanılabilir.
Metin dosyasını diziye okuma
Metin verileri için en yaygın depolama biçimlerinden biri, ayrı satırlar ayrı veri öğeleri olarak ele alınan bir dosyadadır. Get-Content
Cmdlet, burada gösterildiği gibi bir adımda dosyanın tamamını okumak için kullanılabilir:
Get-Content -Path $PROFILE
# Load modules and change to the PowerShell-Docs repository folder
Import-Module posh-git
Set-Location C:\Git\PowerShell-Docs
Get-Content
dosyadan okunan verileri, dosya içeriği satırı başına bir öğeyle bir dizi olarak ele alır. Döndürülen içeriğin Uzunluğunu denetleyerek bunu onaylayabilirsiniz:
PS> (Get-Content -Path $PROFILE).Length
3
Bu komut, en çok bilgi listelerini PowerShell'e almak için kullanışlıdır. Örneğin, dosyada bilgisayar adlarının veya IP adreslerinin listesini, dosyanın C:\temp\domainMembers.txt
her satırında bir adla depolayabilirsiniz. Dosya içeriğini almak ve değişkenine $Computers
yerleştirmek için kullanabilirsinizGet-Content
:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
$Computers
artık her öğede bir bilgisayar adı içeren bir dizidir.
PowerShell