Öğeleri doğrudan işleme
PowerShell sürücülerinde gördüğünüz dosyalar ve klasörler veya kayıt defteri anahtarları gibi öğeler PowerShell'deki Öğeler olarak adlandırılır. Bu öğeyle çalışmaya yönelik cmdlet'lerin adlarında Öğe adı bulunur.
Komutun çıktısı Get-Command -Noun Item
dokuz PowerShell öğesi cmdlet'i olduğunu gösterir.
Get-Command -Noun Item
CommandType Name Definition
----------- ---- ----------
Cmdlet Clear-Item Clear-Item [-Path] <String[]...
Cmdlet Copy-Item Copy-Item [-Path] <String[]>...
Cmdlet Get-Item Get-Item [-Path] <String[]> ...
Cmdlet Invoke-Item Invoke-Item [-Path] <String[...
Cmdlet Move-Item Move-Item [-Path] <String[]>...
Cmdlet New-Item New-Item [-Path] <String[]> ...
Cmdlet Remove-Item Remove-Item [-Path] <String[...
Cmdlet Rename-Item Rename-Item [-Path] <String>...
Cmdlet Set-Item Set-Item [-Path] <String[]> ...
Yeni öğeler oluşturma
Dosya sisteminde yeni bir öğe oluşturmak için cmdlet'ini New-Item
kullanın. Path parametresini öğenin yoluna ve ItemType parametresini veya directory
değerine file
ekleyin.
Örneğin, dizininde C:\Temp
adlı New.Directory
yeni bir dizin oluşturmak için şunu yazın:
New-Item -Path c:\temp\New.Directory -ItemType Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 11:29 AM New.Directory
Dosya oluşturmak için ItemType parametresinin değerini olarak file
değiştirin. Örneğin, dizininde New.Directory
adlı file1.txt
bir dosya oluşturmak için şunu yazın:
New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Yeni bir kayıt defteri anahtarı oluşturmak için aynı tekniği kullanabilirsiniz. Aslında, Windows kayıt defterindeki tek öğe türü bir anahtar olduğundan kayıt defteri anahtarını oluşturmak daha kolaydır. (Kayıt defteri girdileri öğe özellikleridir.) Örneğin, alt anahtarda CurrentVersion
adlı _Test
bir anahtar oluşturmak için şunu yazın:
New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
SKC VC Name Property
--- -- ---- --------
0 0 _Test {}
Bir kayıt defteri yolu yazarken, PowerShell sürücü adlarına HKLM:
iki nokta üst üste (:
) eklediğinizden emin olun ve HKCU:
. İki nokta üst üste olmadan PowerShell yoldaki sürücü adını tanımaz.
Kayıt defteri değerleri neden öğe değildir?
Bir kayıt defteri anahtarındaki Get-ChildItem
öğeleri bulmak için cmdlet'ini kullandığınızda, gerçek kayıt defteri girdilerini veya değerlerini hiçbir zaman görmezsiniz.
Örneğin, kayıt defteri anahtarı HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
genellikle sistem başlatıldığında çalışan uygulamaları temsil eden birkaç kayıt defteri girdisi içerir.
Ancak, anahtarında alt öğeleri aramak için kullandığınızda Get-ChildItem
, tek göreceğiniz anahtarın OptionalComponents
alt anahtarıdır:
Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
SKC VC Name Property
--- -- ---- --------
3 0 OptionalComponents {}
Kayıt defteri girdilerini öğe olarak işlemek kullanışlı olsa da, kayıt defteri girdisine benzersiz olmasını sağlayacak bir yol belirtemezsiniz. Yol gösterimi, Çalıştır adlı kayıt defteri alt anahtarı ile Çalıştır alt anahtarındaki (Varsayılan) kayıt defteri girdisi arasında ayrım yapmaz.
Ayrıca, kayıt defteri girdi adları ters eğik çizgi karakterini (\
) içerebileceğinden, kayıt defteri girdileri öğelerse, bu yolda bulunan alt anahtardan adlı Windows\CurrentVersion\Run
kayıt defteri girdisini ayırt etmek için yol gösterimini kullanamazsınız.
Varolan öğeleri yeniden adlandırma
Bir dosya veya klasörün adını değiştirmek için cmdlet'ini Rename-Item
kullanın. Aşağıdaki komut dosyanın adını file1.txt
olarak fileOne.txt
değiştirir.
Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
Rename-Item
Cmdlet bir dosyanın veya klasörün adını değiştirebilir, ancak öğeyi taşıyamaz. Aşağıdaki komut, dosyayı dizinden New.Directory
Temp dizinine taşımaya çalıştığından başarısız olur.
Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : can't rename because the target specified isn't a path.
At line:1 char:12
+ Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt
Öğeleri taşıma
Bir dosya veya klasörü taşımak için cmdlet'ini Move-Item
kullanın.
Örneğin, aşağıdaki komut New.Directory dizininden C:\temp
sürücünün köküne C:
taşır. Öğenin taşındığını doğrulamak için cmdlet'in PassThru parametresini Move-Item
ekleyin. PassThruMove-Item
olmadan, cmdlet herhangi bir sonuç görüntülemez.
Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 12:14 PM New.Directory
Öğeleri kopyalama
Diğer kabuklardaki kopyalama işlemlerini biliyorsanız, PowerShell'de cmdlet'in Copy-Item
davranışını olağan dışı bulabilirsiniz. Bir öğeyi bir konumdan diğerine kopyaladığınızda, Copy-Item
öğe içeriğini varsayılan olarak kopyalamaz.
Örneğin, dizini C: sürücüsünden dizine C:\temp
kopyalarsanız New.Directory
komut başarılı olur, ancak New.Directory dizinindeki dosyalar kopyalanmamıştır.
Copy-Item -Path C:\New.Directory -Destination C:\temp
içeriğini C:\temp\New.Directory
görüntülerseniz, dosya içermediğini görürsünüz:
PS> Get-ChildItem -Path C:\temp\New.Directory
PS>
Cmdlet içeriği neden yeni konuma kopyalamıyor Copy-Item
?
Copy-Item
Cmdlet genel olacak şekilde tasarlanmıştır; yalnızca dosya ve klasörleri kopyalamak için değildir.
Ayrıca, dosya ve klasörleri kopyalarken bile içindeki öğeleri değil yalnızca kapsayıcıyı kopyalamak isteyebilirsiniz.
Klasörün tüm içeriğini kopyalamak için komutuna cmdlet'in Copy-Item
Recurse parametresini ekleyin. Dizini içeriği olmadan zaten kopyaladıysanız, boş klasörün üzerine yazmanızı sağlayan Force parametresini ekleyin.
Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -Passthru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 1:53 PM New.Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Öğeleri silme
Dosya ve klasörleri silmek için cmdlet'ini Remove-Item
kullanın. gibi Remove-Item
önemli ve geri alınamaz değişiklikler yapabilen PowerShell cmdlet'leri, komutlarını girdiğinizde genellikle onay ister. Örneğin, klasörü kaldırmaya New.Directory
çalışırsanız, klasör dosyaları içerdiğinden komutu onaylamanız istenir:
Remove-Item C:\temp\New.Directory
Confirm
The item at C:\temp\New.Directory 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"):
Yes
Varsayılan yanıt olduğundan, klasörü ve dosyalarını silmek için Enter tuşuna basın. Klasörü onaylamadan kaldırmak için Recurse parametresini kullanın.
Remove-Item C:\temp\New.Directory -Recurse
Öğeleri yürütme
PowerShell, bir dosya veya klasör için varsayılan eylemi gerçekleştirmek üzere cmdlet'ini kullanır Invoke-Item
. Bu varsayılan eylem, kayıt defterindeki varsayılan uygulama işleyicisi tarafından belirlenir; efekti, Dosya Gezgini öğeye çift tıklarsanız aynı olur.
Örneğin, aşağıdaki komutu çalıştırdığınızı varsayalım:
Invoke-Item C:\WINDOWS
Klasöre çift tıklamış C:\Windows
gibi, içinde C:\Windows
bulunan bir Gezgin penceresi görüntülenir.
Dosyayı Windows Vista'nın öncesinde bir sistemde çağırırsanız Boot.ini
:
Invoke-Item C:\boot.ini
.ini
Dosya türü Not Defteri ile ilişkiliyse, boot.ini
dosya Not Defteri açılır.
PowerShell
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin