Öğ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 directorydeğ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 filedeğ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.txtdeğ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.Directorygö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.