Dela via


Manipulera objekt direkt

De element som visas i PowerShell-enheter, till exempel filer och mappar eller registernycklar, kallas objekt i PowerShell. Cmdletarna för att arbeta med objektet har substantivobjektet i sina namn.

Utdata från Get-Command -Noun Item kommandot visar att det finns nio PowerShell-objekt-cmdletar.

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

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

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

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

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

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

Du kan använda samma teknik för att skapa en ny registernyckel. Det är faktiskt enklare att skapa en registernyckel eftersom den enda objekttypen i Windows-registret ä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 kolonet (:) 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 Get-ChildItem för att hitta objekten i en registernyckel visas aldrig faktiska registerposter eller deras värden.

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

Men när du använder Get-ChildItem för att leta efter underordnade objekt i nyckeln ser OptionalComponents du bara undernyckeln 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 vore praktiskt att behandla 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 kör och registerposten (standard) i undernyckeln Kör. Eftersom registerpostnamn kan innehålla omvänt snedstreck (\), om registerposter var objekt, kan du inte använda sökvägsanteckningen för att skilja en registerpost med namnet Windows\CurrentVersion\Run från undernyckeln som finns i sökvägen.

Byta namn på befintliga objekt

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

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

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

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

Flytta objekt

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

Följande kommando flyttar till exempel katalogen New.Directory från C:\temp katalogen till enhetens C: rot. Om du vill kontrollera att objektet har flyttats tar du med parametern PassThru för cmdleten Move-Item . Utan PassThru visar cmdleten Move-Item inga resultat.

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

Kopiera objekt

Om du är bekant med kopieringsåtgärderna i andra gränssnitt kan cmdletens Copy-Item beteende i PowerShell vara ovanligt. När du kopierar ett objekt från en plats till en annan Copy-Item kopieras inte innehållet som standard.

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

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

Om du visar innehållet i C:\temp\New.Directoryser 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?

Cmdleten har utformats för att vara allmän. Det Copy-Item är inte bara för att kopiera filer och mappar. Även när 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 tar du med parametern Recurse för cmdleten Copy-Item i kommandot . Om du redan har kopierat katalogen utan dess innehåll lägger du till parametern Force , som gör att du kan skriva över den tomma mappen.

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

Ta bort objekt

Om du vill ta bort filer och mappar använder du cmdleten Remove-Item . PowerShell-cmdletar, till exempel , som Remove-Itemkan göra betydande, oåterkalleliga ändringar uppmanas ofta att bekräftas när du anger dess kommandon. Om du till exempel försöker ta bort New.Directory mappen uppmanas du att bekräfta 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

PowerShell använder cmdleten Invoke-Item 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 densamma 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 i C:\Windows visas, precis som om du hade dubbelklickat på C:\Windows mappen.

Om du anropar Boot.ini filen på ett system före Windows Vista:

Invoke-Item C:\boot.ini

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