Dosya ve klasörlerle çalışma
PowerShell sürücüleri arasında gezinmek ve üzerlerindeki öğeleri değiştirmek, Windows disk sürücülerindeki dosya ve klasörleri değiştirmeye benzer. Bu makalede, PowerShell kullanılarak belirli dosya ve klasör düzenleme görevlerinin nasıl ele alınacağı anlatılmaktadır.
Bir klasördeki tüm dosya ve klasörleri listeleme
Get-ChildItem'i kullanarak tüm öğeleri doğrudan bir klasöre alabilirsiniz. Gizli veya sistem öğelerini görüntülemek için isteğe bağlı Zorla parametresini ekleyin. Örneğin, bu komut PowerShell Sürücüsü C:'nin doğrudan içeriğini görüntüler.
Get-ChildItem -Path C:\ -Force
Komut, yalnızca doğrudan içerilen öğeleri listeler; bu, bir UNIX kabuğundaki cmd.exe veya ls dosyasındaki dir komutunun kullanılmasına benzer. Alt klasördeki öğeleri göstermek için Recurse parametresini belirtmeniz gerekir. Aşağıdaki komut C: sürücüsündeki her şeyi listeler:
Get-ChildItem -Path C:\ -Force -Recurse
Get-ChildItem, Yol, Filtre, Dahil Et ve Hariç Tut ile öğeleri filtreleyebilir > parametrelerdir, ancak bunlar genellikle yalnızca ada dayalıdır. Where-Object'i kullanarak öğelerin diğer özelliklerine dayalı olarak karmaşık filtreleme gerçekleştirebilirsiniz.
Aşağıdaki komut, Program Dosyaları klasöründe en son 1 Ekim 2005'ten sonra değiştirilen ve 1 megabayttan küçük veya 10 megabayttan büyük olmayan 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 Kopyalama Öğesi ile yapılır. Aşağıdaki komut PowerShell profil komut dosyanızı yedekler:
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}
Test-Path komutu, profil komut dosyasının mevcut olup olmadığını kontrol eder.
Hedef dosya zaten mevcutsa kopyalama girişimi başarısız olur. Önceden var olan bir hedefin üzerine yazmak için Zorla 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, C:\temp\test1 klasörünü yeni C:\temp\DeleteMe klasörüne yinelemeli olarak kopyalar:
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe
Ayrıca seçili öğeleri de kopyalayabilirsiniz. Aşağıdaki komut, C:\data dosyasının herhangi bir yerinde bulunan tüm .txt dosyalarını C:\temp\text dizinine kopyalar:
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text
Dosyaları kopyalamak için yine de xcopy.exe ve robocopy.exe gibi yerel komutları çalıştırabilirsiniz.
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ının birden fazla öğe türü varsa (örneğin, FileSystem PowerShell sağlayıcısı dizinler ve dosyalar arasında ayrım yapıyorsa) öğe türünü belirtmeniz gerekir.
Bu komut yeni bir C:\temp\Yeni Klasör klasörü oluşturur:
New-Item -Path 'C:\temp\New Folder' -ItemType Directory
Bu komut yeni bir boş dosya C:\temp\Yeni Klasör\file.txt oluşturur
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File
Bu önemli
Bir klasör oluşturmak için Zorla anahtarını Yeni Öğe komutuyla birlikte kullandığınızda ve klasör zaten mevcut olduğunda, üzerine yazmaz veya değiştirmez. klasör. Sadece mevcut klasör nesnesini döndürecektir. Ancak zaten var olan bir dosyada New-Item -Force komutunu kullanırsanız dosyanın üzerine yazılır.
Bir klasördeki tüm dosya ve klasörleri kaldırma
İçerilen öğeleri Remove-Item kullanarak kaldırabilirsiniz, ancak öğenin başka bir şey içermesi durumunda kaldırma işlemini onaylamanız istenecektir. Örneğin, diğer öğeleri içeren C:\temp\DeleteMe klasörünü 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"):
İçerilen her öğe için sorulmasını istemiyorsanız Recurse parametresini belirtin:
Remove-Item -Path C:\temp\DeleteMe -Recurse
Yerel bir klasörü sürücü olarak eşleme
Ayrıca New-PSDrive komutunu kullanarak yerel bir klasörü eşleyebilirsiniz. Aşağıdaki komut, yerel Program Dosyaları dizininde bulunan ve yalnızca PowerShell oturumundan görülebilen bir yerel P: sürücüsü oluşturur:
New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem
Ağ sürücülerinde olduğu gibi, PowerShell içinde eşlenen sürücüler de PowerShell kabuğu tarafından hemen görülebilir. Dosya Gezgini'nden görülebilen eşlenmiş bir sürücü oluşturmak için Devam Et parametresini kullanın. Ancak Persist ile yalnızca uzak yollar kullanılabilir.
Bir metin dosyasını diziye okuma
Metin verileri için en yaygın depolama formatlarından biri, ayrı veri öğeleri olarak değerlendirilen ayrı satırlara sahip bir dosyadır. Get-Content cmdlet'i, burada gösterildiği gibi, bir dosyanın tamamını tek adımda 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ğinin her satırında bir öğe olacak şekilde bir dizi olarak ele alır. Döndürülen içeriğin Uzunluğunu kontrol ederek bunu doğrulayabilirsiniz:
PS> (Get-Content -Path $PROFILE).Length
3
Bu komut en çok bilgi listelerini PowerShell'e almak için kullanışlıdır. Örneğin, bilgisayar adlarının veya IP adreslerinin bir listesini C:\temp\domainMembers.txt dosyasında, dosyanın her satırında bir ad olacak şekilde saklayabilirsiniz. Dosya içeriğini almak ve bunları $Computers değişkenine koymak için Get-Content'i kullanabilirsiniz:
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
$Computers artık her öğesinde bir bilgisayar adı içeren bir dizidir.