Dosya ve Klasörlerle Çalışma
Windows PowerShell sürücüler arasında gezinmek ve bunların üzerinde öğeleri işlemek, Windows fiziksel disk sürücülerindeki dosya ve klasörleri düzenleme ile benzerdir. Bu makalede, PowerShell kullanarak belirli dosya ve klasör işleme görevleriyle nasıl başa çıkılabileceği açıklanır.
Bir klasör Içindeki tüm dosya ve klasörleri listeleme
Kullanarak tüm öğeleri doğrudan bir klasör içinde alabilirsiniz Get-ChildItem . Gizli veya sistem öğelerini göstermek için isteğe bağlı zorlama parametresini ekleyin. örneğin, bu komut, c sürücüsünün (Windows fiziksel sürücüsüyle aynı olan) Windows PowerShell doğrudan içeriğini görüntüler:
Get-ChildItem -Path C:\ -Force
komutu, Cmd.exe DIR komutu veya UNIX kabuğu gibi yalnızca doğrudan içerilen öğeleri listeler ls . İçerilen öğeleri göstermek için -Recurse parametreyi de belirtmeniz gerekir. (Bu işlem, tamamlanması çok uzun zaman alabilir.) C sürücüsündeki her şeyi listelemek için:
Get-ChildItem -Path C:\ -Force -Recurse
Get-ChildItem , kendi yolu, filtresi, içerme ve dışlama parametreleriyle filtre uygulayabilir, ancak bunlar genellikle yalnızca adı temel alır. Öğesini kullanarak, öğelerin diğer özelliklerine göre karmaşık filtreleme gerçekleştirebilirsiniz Where-Object .
Aşağıdaki komut, 1 Ekim 2005 ' den sonra son değiştirilen ve 1 megabayttan küçük veya 10 megabayttan büyük olmayan program dosyaları klasöründeki 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 yapılır Copy-Item . Aşağıdaki komut C: \boot.ini: \ Boot. bak öğesine yedekler:
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak
Hedef dosya zaten varsa kopyalama girişimi başarısız olur. Önceden var olan bir hedefin üzerine yazmak için zorla parametresini kullanın:
Copy-Item -Path C:\boot.ini -Destination C:\boot.bak -Force
Bu komut, hedef salt okunurdur olsa bile işe yarar.
Klasör kopyalama aynı şekilde çalışmaktadır. Bu komut, klasörü C:\temp\test1 yinelemeli olarak yeni klasöre kopyalar C:\temp\DeleteMe :
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe
Ayrıca, öğelerin bir seçimini de kopyalayabilirsiniz. Aşağıdaki komut içinde herhangi bir yerde bulunan tüm .txt dosyalarını ' a kopyalar C:\data C:\temp\text :
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text
Dosya sistemi kopyalarını gerçekleştirmek için diğer araçları kullanmaya devam edebilirsiniz. XCOPY, ROBOCOPY ve Scripting. Filesystemmobject gibi com nesneleri, tüm Windows PowerShell çalışır. örneğin, yedeklemek için Windows betik ana bilgisayar betiği. FileSystem COM sınıfını kullanabilirsiniz C:\boot.ini C:\boot.bak :
(New-Object -ComObject Scripting.FileSystemObject).CopyFile('C:\boot.ini', 'C:\boot.bak')
Dosya ve klasör oluşturma
yeni öğelerin oluşturulması tüm Windows PowerShell sağlayıcılarıyla aynı şekilde çalışacaktır. Windows PowerShell sağlayıcıda birden fazla öğe türü varsa — örneğin, dosya sistemi Windows PowerShell sağlayıcı dizin ve dosya arasında ayrım yapar — öğe türünü belirtmeniz gerekir.
Bu komut yeni bir klasör oluşturur C:\temp\New Folder :
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
New-Item Bir klasör oluşturmak için zorla anahtarını komutuyla kullanırken ve klasör zaten varsa, bu klasör üzerine yazmaz veya değiştirmez. Yalnızca var olan klasör nesnesini döndürür. Ancak, New-Item -Force zaten var olan bir dosyada kullanıyorsanız, dosyanın üzerine tamamen üzerine yazılır .
Bir klasör Içindeki tüm dosya ve klasörleri kaldırma
İçerilen öğeleri kullanarak kaldırabilirsiniz Remove-Item , ancak öğe başka bir şey içeriyorsa kaldırma işlemini onaylamanız istenir. örneğin, C:\temp\DeleteMe diğer öğeleri içeren klasörü silmeye çalışırsanız, Windows 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 was not
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 istenmesini istemiyorsanız, Recurse parametresini belirtin:
Remove-Item -Path C:\temp\DeleteMe -Recurse
Yerel bir klasörü sürücü olarak eşleme
Ayrıca, komutunu kullanarak yerel bir klasörü eşleyebilirsiniz New-PSDrive . Aşağıdaki komut yerel Program Files dizininde belirtilen yerel bir sürücü oluşturur P: ve yalnızca PowerShell oturumundan görünür:
New-PSDrive -Name P -Root $env:ProgramFiles -PSProvider FileSystem
ağ sürücülerinde olduğu gibi, Windows PowerShell içinde eşlenen sürücüler hemen Windows PowerShell kabuğu tarafından görülebilir. Dosya Gezgini 'nden görünür bir eşlenen sürücü oluşturmak için parametresi -Persist gereklidir. Ancak, kalıcı olarak yalnızca uzak yollar kullanılabilir.
Bir metin dosyasını bir diziye okuma
Metin verileri için daha yaygın depolama biçimlerinden biri ayrı satırlar olarak değerlendirilen bir dosya içinde farklı veri öğeleri olarak değerlendirilir. Get-ContentCmdlet 'i, burada gösterildiği gibi, bir adımda tüm bir dosyayı okumak için kullanılabilir:
PS> Get-Content -Path C:\boot.ini
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional"
/noexecute=AlwaysOff /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=" Microsoft Windows XP Professional
with Data Execution Prevention" /noexecute=optin /fastdetect
Get-Content Dosya içeriğinin her satırı için bir öğe olarak dosyadaki okunan verileri bir dizi olarak zaten ele alır. Döndürülen içeriğin uzunluğunu denetleyerek bunu doğrulayabilirsiniz:
PS> (Get-Content -Path C:\boot.ini).Length
6
bu komut, Windows PowerShell doğrudan bilgi listesi almak için yararlıdır. Örneğin, C:\temp\domainMembers.txt dosyanın her satırında bir ada sahip bir dosya için bilgisayar adlarının veya IP adreslerinin bir listesini saklayabilirsiniz. Get-ContentDosya içeriğini almak ve bunları değişkenine koymak için ' i kullanabilirsiniz $Computers :
$Computers = Get-Content -Path C:\temp\DomainMembers.txt
$Computers Artık her öğe için bir bilgisayar adı içeren bir dizidir.