Manipulera objekt direkt

Elementen som visas i Windows PowerShell-enheter, till exempel filer och mappar på filsystemenheterna och registernycklarna på Windows PowerShell-registerenheterna, kallas objekt i Windows PowerShell. Cmdletarna för att arbeta med objekten har substantivobjektet i sina namn.

Kommandots utdata Get-Command -Noun Item visar att det finns nio PowerShell-objekt-cmdlets.

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[]> ...

Skapa nya objekt (nytt objekt)

Om du vill skapa ett nytt objekt i filsystemet använder du New-Item cmdleten . Inkludera parametern Path med sökväg till objektet och parametern ItemType med värdet file eller directory .

Om du till exempel vill skapa en ny katalog New.Directory med namnet i katalogen skriver C:\Temp du:

New-Item -Path c:\temp\New.Directory -ItemType Directory
    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18  11:29 AM            New.Directory

Om du vill skapa en fil ändrar du värdet för parametern ItemType till file . Om du till exempel vill skapa en fil file1.txt med namnet i katalogen skriver New.Directory du:

New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file
    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-18  11:44 AM          0 file1

Du kan använda samma metod för att skapa en ny registernyckel. Det är i själva verket enklare att skapa en registernyckel eftersom den enda objekttypen i Windows är en nyckel. (Registerposter är objektegenskaper.) Om du till exempel vill skapa en nyckel med namnet "_Test" i undernyckeln CurrentVersion skriver du:

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                          {}

När du skriver en registersökväg måste du inkludera kolon ( : ) i PowerShell-enhetsnamnen HKLM: och HKCU: . Utan kolonet känner PowerShell inte igen enhetsnamnet i sökvägen.

Varför registervärden inte är objekt

När du använder cmdleten för att hitta objekten i en registernyckel ser du aldrig faktiska Get-ChildItem registerposter eller deras värden.

Registernyckeln innehåller till exempel HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run vanligtvis flera registerposter som representerar program som körs när systemet startar.

Men när du använder för att leta efter underordnade objekt i nyckeln ser du bara undernyckeln Get-ChildItem OptionalComponents för nyckeln:

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             {}

Även om det skulle vara praktiskt att hantera registerposter som objekt kan du inte ange en sökväg till en registerpost på ett sätt som säkerställer att den är unik. Sökvägs notationen skiljer inte mellan registerundernyckeln med namnet Kör och registerposten (standard) i undernyckeln Kör. Eftersom registerpostnamnen kan innehålla omstreckstecknet ( ), om registerposter är objekt, kan du inte använda sökvägs notationen för att särskilja en registerpost med namnet från den undernyckel som finns på den \ Windows\CurrentVersion\Run sökvägen.

Byta namn på befintliga objekt (Rename-Item)

Om du vill ändra namnet på en fil eller mapp använder du Rename-Item cmdleten . Följande kommando ändrar namnet på file1.txt filen till fileOne.txt .

Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt

Rename-ItemCmdleten kan ändra namnet på en fil eller mapp, men den kan inte flytta ett objekt. Följande kommando misslyckas eftersom det försöker flytta filen från katalogen New.Directory till Temp-katalogen.

Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : Cannot rename because the target specified is not a path.
At line:1 char:12
+ Rename-Item  <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt

Flytta objekt (flytta objekt)

Om du vill flytta en fil eller mapp använder du Move-Item cmdleten .

Följande kommando flyttar till exempel katalogen New.Directory från C:\temp katalogen till roten på C:-enheten. För att kontrollera att objektet har flyttats inkluderar du parametern PassThru för Move-Item cmdleten . Utan Passthru visar Move-Item cmdleten inga resultat.

Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18  12:14 PM            New.Directory

Kopiera objekt (kopiera objekt)

Om du är bekant med kopieringsåtgärder i andra gränssnitt kanske du tycker att beteendet för Copy-Item cmdleten i Windows PowerShell är ovanligt. När du kopierar ett objekt från en plats till en annan Copy-Item inte innehållet som standard.

Om du till exempel kopierar katalogen från enhet C: till katalogen lyckas kommandot, men filerna i New.Directory C:\temp katalogen New.Directory kopieras inte.

Copy-Item -Path C:\New.Directory -Destination C:\temp

Om du visar innehållet i C:\temp\New.Directory ser du att det inte innehåller några filer:

PS> Get-ChildItem -Path C:\temp\New.Directory
PS>

Varför kopierar inte Copy-Item cmdleten innehållet till den nya platsen?

Copy-ItemCmdleten har utformats för att vara generisk, den är inte bara avsedd för att kopiera filer och mappar. Även om du kopierar filer och mappar kanske du bara vill kopiera containern och inte objekten i den.

Om du vill kopiera allt innehåll i en mapp inkluderar du parametern Recurse för Copy-Item cmdleten i kommandot . Om du redan har kopierat katalogen utan dess innehåll lägger du till force-parametern så att du kan skriva över den tomma mappen.

Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -Passthru
    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        2006-05-18   1:53 PM            New.Directory

    Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2006-05-18  11:44 AM          0 file1

Ta bort objekt (Remove-Item)

Om du vill ta bort filer och mappar använder du Remove-Item cmdleten . Windows PowerShell cmdlets, till exempel , som kan göra betydande, oåterkalleliga ändringar kommer ofta att fråga efter Remove-Item bekräftelse när du anger dess kommandon. Om du till exempel försöker ta bort mappen uppmanas du att bekräfta New.Directory kommandot eftersom mappen innehåller filer:

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"):

Eftersom Yes är standardsvaret trycker du på Retur för att ta bort mappen och dess filer. Om du vill ta bort mappen utan att bekräfta använder du parametern Recurse.

Remove-Item C:\temp\New.Directory -Recurse

Köra objekt (Invoke-Item)

PowerShell använder Invoke-Item cmdleten för att utföra en standardåtgärd för en fil eller mapp. Den här standardåtgärden bestäms av standardprogramhanteraren i registret. effekten är samma som om du dubbelklickar på objektet i Utforskaren.

Anta till exempel att du kör följande kommando:

Invoke-Item C:\WINDOWS

Ett Explorer-fönster som finns C:\Windows i visas, precis som om du hade dubbelklickat på C:\Windows mappen.

Om du anropar Boot.ini filen på ett system innan du Windows Vista:

Invoke-Item C:\boot.ini

Om .ini filtypen är associerad med Anteckningar öppnas boot.ini filen i Anteckningar.