Om egenskaper

  • 12/01/2017
  • 5 minuter att läsa
    • S
    • s
    • q

Kort beskrivning

Beskriver hur man använder objektegenskaper i PowerShell.

Lång beskrivning

PowerShell använder strukturerade samlingar av information som kallas objekt för att representera objekt i datalager eller datorns tillstånd. Vanligtvis arbetar du med objekt som ingår i Microsoft .NET Framework, men du kan också skapa egna objekt i PowerShell.

Sambandet mellan ett objekt och dess objekt är mycket nära. När du ändrar ett objekt ändrar du vanligtvis det objekt som det representerar. När du till exempel hämtar en fil i PowerShell får du inte den faktiska filen. Istället får du ett FileInfo-objekt som representerar filen. När du ändrar FileInfoobjektet ändras även filen.

De flesta objekt har egenskaper. Egenskaper är de data som är kopplade till ett objekt. Olika typer av objekt har olika egenskaper. EttFileInfo-objekt, som representerar en fil, har till exempel en IsReadOnly-egenskap som innehåller $True om filen har attributet skrivskydd och $False om den inte har det.Ett DirectoryInfo-objekt, som representerar en katalog i filsystemet, har en Parent-egenskap som innehåller sökvägen till den överordnade katalogen.

Objektegenskaper

För att få fram egenskaperna för ett objekt använder du cmdlet Get-Member. Om du till exempel vill hämta egenskaperna för ett FileInfo-objekt använder du cmdlet Get-ChildItem för att hämta FileInfo-objektet som representerar en fil. Använd sedan en pipelineoperator (|) för att skicka FileInfo-objektet till Get-Member. Följande kommando hämtar filen PowerShell.exe och skickar den till Get-Member.Den automatiska variabeln $Pshome innehåller sökvägen till PowerShellinstallationskatalogen.

Get-ChildItem $pshome\PowerShell.exe | Get-Member

Utmatningen av kommandot listar medlemmarna i FileInfo-objektet.Medlemmarna omfattar både egenskaper och metoder. När du arbetar i PowerShell har du tillgång till alla medlemmar i objekten.

Om du bara vill få fram ett objekts egenskaper och inte metoderna använder du parameternMemberType i cmdlet Get-Member med värdet ”property”, som visas i följande exempel.

Get-ChildItem $pshome\PowerShell.exe | Get-Member -MemberType property
TypeName: System.IO.FileInfoName MemberType Definition---- ---------- ----------Attributes Property System.IO.FileAttributes Attributes {get;set;}CreationTime Property System.DateTime CreationTime {get;set;}CreationTimeUtc Property System.DateTime CreationTimeUtc {get;set;}Directory Property System.IO.DirectoryInfo Directory {get;}DirectoryName Property System.String DirectoryName {get;}Exists Property System.Boolean Exists {get;}Extension Property System.String Extension {get;}FullName Property System.String FullName {get;}IsReadOnly Property System.Boolean IsReadOnly {get;set;}LastAccessTime Property System.DateTime LastAccessTime {get;set;}LastAccessTimeUtc Property System.DateTime LastAccessTimeUtc {get;set;}LastWriteTime Property System.DateTime LastWriteTime {get;set;}LastWriteTimeUtc Property System.DateTime LastWriteTimeUtc {get;set;}Length Property System.Int64 Length {get;}Name Property System.String Name {get;}

När du har hittat egenskaperna kan du använda dem i dina PowerShell-kommandon.

Värden för egenskaper

Alla objekt av en viss typ har visserligen samma egenskaper, men värdena för dessa egenskaper beskriver det specifika objektet. Till exempel har varjeFileInfo-objekt en CreationTime-egenskap, men värdet på den egenskapen skiljer sig åt för varje fil.

Det vanligaste sättet att få fram värdena på ett objekts egenskaper är att använda dot-metoden. Skriv en referens till objektet, t.ex. en variabel som innehåller objektet eller ett kommando som hämtar objektet. Skriv sedan en punkt (.)följt av egenskapsnamnet.

Följande kommando visar till exempel värdet på CreationTimeegenskapen för filen PowerShell.exe. Kommandot Get-ChildItem returnerar ettFileInfo-objekt som representerar filen PowerShell.exe. Kommandot är omslutet av parenteser för att se till att det utförs innan några egenskaper nås. Kommandot Get-ChildItem följs av en punkt och namnet på egenskapen CreationTime, enligt följande:

(Get-ChildItem $pshome\PowerShell.exe).creationtime
Tuesday, March 18, 2008 12:07:52 AM

Du kan också spara ett objekt i en variabel och sedan hämta dess egenskaper med hjälp av punktmetoden, enligt följande exempel:

$a = Get-ChildItem $pshome\PowerShell.exe$a.CreationTime
Tuesday, March 18, 2008 12:07:52 AM

Du kan också använda cmdlets Select-Object och Format-List för att visa egenskapsvärdena för ett objekt. Select-Object och Format-List har båda en parameterProperty. Du kan använda parametern Property för att ange en eller flera egenskaper och deras värden. Du kan också använda jokertecknet (*) för att representera alla egenskaper.

Följande kommando visar till exempel värdena för alla egenskaper i filen PowerShell.exe.

Get-ChildItem $pshome\PowerShell.exe | Format-List -Property *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows\System3 2\WindowsPowerShell\v1.0\PowerShell.exePSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows\System3 2\WindowsPowerShell\v1.0PSChildName : PowerShell.exePSDrive : CPSProvider : Microsoft.PowerShell.Core\FileSystemPSIsContainer : FalseMode : -a----VersionInfo : File: C:\Windows\System32\WindowsPowerShell\ v1.0\PowerShell.exe InternalName: POWERSHELL OriginalFilename: PowerShell.EXE.MUI FileVersion: 10.0.16299.15 (WinBuild.160101.0800) FileDescription: Windows PowerShell Product: Microsoft Windows Operating System ProductVersion: 10.0.16299.15 Debug: False Patched: False PreRelease: False PrivateBuild: False SpecialBuild: False Language: English (United States)BaseName : PowerShellTarget : {C:\Windows\WinSxS\amd64_microsoft-windows-powershell-ex e_31bf3856ad364e35_10.0.16299.15_none_8c022aa6735716ae\p owershell.exe}LinkType : HardLinkName : PowerShell.exeLength : 449024DirectoryName : C:\Windows\System32\WindowsPowerShell\v1.0Directory : C:\Windows\System32\WindowsPowerShell\v1.0IsReadOnly : FalseExists : TrueFullName : C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exExtension : .exeCreationTime : 9/29/2017 6:43:19 AMCreationTimeUtc : 9/29/2017 1:43:19 PMLastAccessTime : 9/29/2017 6:43:19 AMLastAccessTimeUtc : 9/29/2017 1:43:19 PMLastWriteTime : 9/29/2017 6:43:19 AMLastWriteTimeUtc : 9/29/2017 1:43:19 PMAttributes : Archive

Statiska egenskaper

Du kan använda de statiska egenskaperna för .NET-klasser i PowerShell. Statiska egenskaper är egenskaper hos klassen, till skillnad från standardegenskaper, som är egenskaper hos ett objekt.

För att få fram de statiska egenskaperna hos en klass använder du parametern Static i cmdletGet-Member.

Följande kommando hämtar till exempel de statiska egenskaperna hos klassenSystem.DateTime.

Get-Date | Get-Member -MemberType Property -Static
TypeName: System.DateTimeName MemberType Definition---- ---------- ----------MaxValue Property static datetime MaxValue {get;}MinValue Property static datetime MinValue {get;}Now Property datetime Now {get;}Today Property datetime Today {get;}UtcNow Property datetime UtcNow {get;}

För att hämta värdet av en statisk egenskap använder du följande syntax.

::<Property>

För att hämta värdet av den statiska egenskapen UtcNow för klassen System.DateTime används till exempel följande kommando.

::UtcNow

Genskaper för skalära objekt och samlingar

Genskaperna för ett (”skalärt”) objekt av en viss typ skiljer sig ofta från egenskaperna för en samling av objekt av samma typ.Varje tjänst har till exempel egenskapen DisplayName, men en samling av tjänster har inte egenskapen DisplayName.

Följande kommando hämtar värdet för DisplayName-egenskapen för tjänsten ”Audiosrv”.

(Get-Service Audiosrv).DisplayName
Windows Audio

Med början i PowerShell 3.0 försöker PowerShell förhindra skriptfel som beror på att egenskaperna för skalära objekt och samlingar skiljer sig åt. Samma kommando returnerar värdet av DisplayName-egenskapen för varje tjänst som Get-Service returnerar.

(Get-Service).DisplayName
Application ExperienceApplication Layer Gateway ServiceWindows All-User Install AgentApplication IdentityApplication Information...

När du skickar in en samling, men begär en egenskap som bara finns för enstaka (”skalära”) objekt, returnerar PowerShell värdet av den egenskapen för varje objekt i samlingen.

Alla samlingar har en Count-egenskap som returnerar hur många objekt som finns i samlingen.

(Get-Service).Count
176

Med början i PowerShell 3.0 returnerar PowerShell rätt värde om du begär egenskapen Count eller Length för noll objekt eller ett objekt.

(Get-Service Audiosrv).Count
1

Om det finns en egenskap för de enskilda objekten och för samlingen returneras endast samlingsegenskapen.

$collection = @(@{length = "foo"}@{length = "bar"})# PowerShell returns the collection's Length.$collection.length

Lämna ett svar

Din e-postadress kommer inte publiceras.