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.