Om egenskaber

  • 12/01/2017
  • 5 minutter at læse
    • S
    • s
    • q

Kort beskrivelse

Beskriver, hvordan man bruger objektegenskaber i PowerShell.

Lang beskrivelse

PowerShell bruger strukturerede samlinger af oplysninger, der kaldes objekter, til at repræsentere elementerne i datalagre eller computerens tilstand. Typisk arbejder du med objekter, der er en del af Microsoft .NET Framework, men dukan også oprette brugerdefinerede objekter i PowerShell.

Sammenhængen mellem et emne og dets objekt er meget tæt. Når du ændrer et objekt, ændrer du normalt også det objekt, som det repræsenterer. Når du f.eks. henter en fil i PowerShell, får du ikke den faktiske fil. I stedet får du FileInfo-objektet, som repræsenterer filen. Når du ændrer FileInfoobjektet, ændres filen også.

De fleste objekter har egenskaber. Egenskaber er de data, der er knyttet til et objekt. Forskellige typer af objekter har forskellige egenskaber. EtFileInfo-objekt, som repræsenterer en fil, har f.eks. en IsReadOnly-egenskab, der indeholder $True, hvis filen har en skrivebeskyttet attribut, og $False, hvis den ikke har det.Et DirectoryInfo-objekt, som repræsenterer en filsystemmappe, har en Parent-egenskab, der indeholder stien til den overordnede mappe.

Objektegenskaber

For at få vist egenskaberne for et objekt skal du bruge cmdletten Get-Member. Hvis du f.eks. vil hente egenskaberne for et FileInfo-objekt, skal du bruge cmdletten Get-ChildItemfor at hente det FileInfo-objekt, der repræsenterer en fil. Brug derefter en pipelineoperator (|) til at sende FileInfo-objektet til Get-Member. Følgende kommando henter PowerShell.exe-filen og sender den til Get-Member.Den automatiske variabel $Pshome indeholder stien til PowerShellinstallationsmappen.

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

Opdatet af kommandoen viser en liste over medlemmerne af FileInfo-objektet.Medlemmerne omfatter både egenskaber og metoder. Når du arbejder i PowerShell, har du adgang til alle objektets medlemmer.

For kun at få fat i et objekts egenskaber og ikke metoderne skal du bruge parameterenMemberType i cmdlet Get-Member med en værdi på “property”, som vist i det følgende eksempel.

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 fundet egenskaberne, kan du bruge dem i dine PowerShell-kommandoer.

Egenskabsværdier

Selv om alle objekter af en bestemt type har de samme egenskaber, beskriver værdierne af disse egenskaber det pågældende objekt. AlleFileInfo-objekter har f.eks. en CreationTime-egenskab, men værdien af denne egenskab er forskellig for hver enkelt fil.

Den mest almindelige måde at få værdierne for et objekts egenskaber på er ved at bruge dot-metoden. Indtast en henvisning til objektet, f.eks. en variabel, der indeholder objektet, eller en kommando, der henter objektet. Skriv derefter et punktum (.)efterfulgt af egenskabsnavnet.

Fors eksempel viser følgende kommando værdien af CreationTimeegenskaben for filen PowerShell.exe. Kommandoen Get-ChildItem returnerer etFileInfo-objekt, der repræsenterer PowerShell.exe-filen. Kommandoen er omsluttet af parenteser for at sikre, at den udføres, før der er adgang til egenskaber. Kommandoen Get-ChildItem efterfølges af et punktum og navnet på CreationTime-egenskaben, som følger:

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

Du kan også gemme et objekt i en variabel og derefter hente dets egenskaber ved hjælp af punktum-metoden, som vist i følgende eksempel:

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

Du kan også bruge cmdlets Select-Object og Format-List til at få vist et objekts egenskabsværdier. Select-Object og Format-List har hver især en parameterProperty . Du kan bruge parameteren Property til at angive en eller flere egenskaber og deres værdier. Du kan også bruge jokertegnet (*) til at repræsentere alle egenskaberne.

For eksempel viser følgende kommando værdierne for alle egenskaberne i PowerShell.exe-filen.

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

Statiske egenskaber

Du kan bruge de statiske egenskaber for .NET-klasser i PowerShell. Statiske egenskaber er egenskaber for klassen i modsætning til standardegenskaber, som er egenskaber for et objekt.

For at få fat i de statiske egenskaber for en klasse skal du bruge parameteren Static i cmdlettenGet-Member.

Den følgende kommando får f.eks. fat i de statiske egenskaber forSystem.DateTime-klassen.

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

For at hente værdien af en statisk egenskab skal du bruge følgende syntaks.

::<Property>

For eksempel henter følgende kommando værdien af den statiske egenskab UtcNow for System.DateTime-klassen.

::UtcNow

Egenskaber for skalære objekter og samlinger

Egenskaberne for et (“skalært”) objekt af en bestemt type er ofte forskellige fra egenskaberne for en samling af objekter af samme type.F.eks. har alle tjenester en DisplayName-egenskab, men en samling af tjenester har ikke en DisplayName-egenskab.

Følgende kommando henter værdien af DisplayName-egenskaben for tjenesten “Audiosrv”.

(Get-Service Audiosrv).DisplayName
Windows Audio

Med PowerShell 3.0 forsøger PowerShell at forhindre scriptingfejl, der skyldes de forskellige egenskaber for skalarobjekter og samlinger. Samme kommando returnerer værdien af DisplayName-egenskaben for hver tjeneste, som Get-Service returnerer.

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

Når du indsender en samling, men anmoder om en egenskab, der kun findes på enkeltobjekter (“skalære”), returnerer PowerShell værdien af den pågældende egenskab for hvert objekt i samlingen.

Alle samlinger har en Count-egenskab, der returnerer, hvor mange objekter der er i samlingen.

(Get-Service).Count
176

Med start i PowerShell 3.0 returnerer PowerShell den korrekte værdi, hvis du anmoder om egenskaben Count eller Length for nul objekter eller ét objekt.

(Get-Service Audiosrv).Count
1

Hvis der findes en egenskab på de enkelte objekter og på samlingen, returneres kun samlingens egenskab.

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.