Over eigenschappen
Korte beschrijving
Hierin wordt beschreven hoe u objecteigenschappen gebruikt in PowerShell.
Lange beschrijving
PowerShell maakt gebruik van gestructureerde verzamelingen gegevens, zogenaamde objecten, om de items in gegevensarchieven of de status van de computer weer te geven. Normaal gesproken werkt u met objecten die deel uitmaken van de Microsoft .NET Framework, maar u kunt ook aangepaste objecten maken in PowerShell.
De koppeling tussen een item en het object ervan is zeer nauw. Wanneer u een object wijzigt, wijzigt u meestal het item dat het vertegenwoordigt. Wanneer u bijvoorbeeld een bestand in PowerShell krijgt, krijgt u het werkelijke bestand niet. In plaats daarvan krijgt u een FileInfo-object dat het bestand vertegenwoordigt. Wanneer u het FileInfo-object wijzigt, wordt het bestand ook gewijzigd.
De meeste objecten hebben eigenschappen. Eigenschappen zijn de gegevens die zijn gekoppeld aan een object. Verschillende typen objecten hebben verschillende eigenschappen. Een FileInfo-object, dat een bestand vertegenwoordigt, heeft bijvoorbeeld een eigenschap IsReadOnly die $True bevat als het bestand het kenmerk Alleen-lezen heeft en $False als dat niet het geval is. Een DirectoryInfo-object, dat een bestandssysteemmap vertegenwoordigt, heeft een eigenschap Parent die het pad naar de bovenliggende map bevat.
Objecteigenschappen
Gebruik Get-Member
de cmdlet om de eigenschappen van een object op te halen. Als u bijvoorbeeld de eigenschappen van een FileInfo-object wilt ophalen, gebruikt u de Get-ChildItem
cmdlet om het fileInfo-object op te halen dat een bestand vertegenwoordigt. Gebruik vervolgens een pijplijnoperator (|) om het fileInfo-object te verzenden naar Get-Member
. Met de volgende opdracht wordt het PowerShell.exe-bestand opgeslagen en verzonden naar Get-Member
.
De $Pshome automatische variabele bevat het pad van de PowerShell-installatiemap.
Get-ChildItem $pshome\PowerShell.exe | Get-Member
De uitvoer van de opdracht bevat de leden van het object FileInfo . Leden bevatten zowel eigenschappen als methoden. Wanneer u in PowerShell werkt, hebt u toegang tot alle leden van de objecten.
Als u alleen de eigenschappen van een object wilt ophalen en niet de methoden, gebruikt u de parameter MemberType van de Get-Member
cmdlet met de waarde 'eigenschap', zoals wordt weergegeven in het volgende voorbeeld.
Get-ChildItem $pshome\PowerShell.exe | Get-Member -MemberType property
TypeName: System.IO.FileInfo
Name 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;}
Nadat u de eigenschappen hebt gevonden, kunt u deze gebruiken in uw PowerShell-opdrachten.
Eigenschapswaarden
Hoewel elk object van een specifiek type dezelfde eigenschappen heeft, beschrijven de waarden van deze eigenschappen het specifieke object. Elk FileInfo-object heeft bijvoorbeeld de eigenschap CreationTime, maar de waarde van die eigenschap verschilt voor elk bestand.
De meest voorkomende manier om de waarden van de eigenschappen van een object op te halen, is door de methode dot te gebruiken. Typ een verwijzing naar het object, zoals een variabele die het object bevat of een opdracht waarmee het object wordt opgehaald. Typ vervolgens een punt (.) gevolgd door de naam van de eigenschap.
Met de volgende opdracht wordt bijvoorbeeld de waarde van de eigenschap CreationTime van het PowerShell.exe-bestand weergegeven. De Get-ChildItem
opdracht retourneert een FileInfo-object dat het PowerShell.exe-bestand vertegenwoordigt. De opdracht staat tussen haakjes om ervoor te zorgen dat deze wordt uitgevoerd voordat eigenschappen worden geopend. De Get-ChildItem
opdracht wordt als volgt gevolgd door een punt en de naam van de eigenschap CreationTime:
(Get-ChildItem $pshome\PowerShell.exe).creationtime
Tuesday, March 18, 2008 12:07:52 AM
U kunt een object ook opslaan in een variabele en vervolgens de eigenschappen ervan ophalen met behulp van de puntmethode, zoals wordt weergegeven in het volgende voorbeeld:
$a = Get-ChildItem $pshome\PowerShell.exe
$a.CreationTime
Tuesday, March 18, 2008 12:07:52 AM
U kunt ook de Select-Object
cmdlets en Format-List
gebruiken om de eigenschapswaarden van een object weer te geven. Select-Object
en Format-List
hebben elk een eigenschapsparameter . U kunt de parameter Eigenschap gebruiken om een of meer eigenschappen en de bijbehorende waarden op te geven. U kunt ook het jokerteken (*) gebruiken om alle eigenschappen weer te geven.
Met de volgende opdracht worden bijvoorbeeld de waarden van alle eigenschappen van het PowerShell.exe-bestand weergegeven.
Get-ChildItem $pshome\PowerShell.exe | Format-List -Property *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows\System3
2\WindowsPowerShell\v1.0\PowerShell.exe
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows\System3
2\WindowsPowerShell\v1.0
PSChildName : PowerShell.exe
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
Mode : -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 : PowerShell
Target : {C:\Windows\WinSxS\amd64_microsoft-windows-powershell-ex
e_31bf3856ad364e35_10.0.16299.15_none_8c022aa6735716ae\p
owershell.exe}
LinkType : HardLink
Name : PowerShell.exe
Length : 449024
DirectoryName : C:\Windows\System32\WindowsPowerShell\v1.0
Directory : C:\Windows\System32\WindowsPowerShell\v1.0
IsReadOnly : False
Exists : True
FullName : C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.ex
Extension : .exe
CreationTime : 9/29/2017 6:43:19 AM
CreationTimeUtc : 9/29/2017 1:43:19 PM
LastAccessTime : 9/29/2017 6:43:19 AM
LastAccessTimeUtc : 9/29/2017 1:43:19 PM
LastWriteTime : 9/29/2017 6:43:19 AM
LastWriteTimeUtc : 9/29/2017 1:43:19 PM
Attributes : Archive
Statische eigenschappen
U kunt de statische eigenschappen van .NET-klassen in PowerShell gebruiken. Statische eigenschappen zijn eigenschappen van klasse, in tegenstelling tot standaardeigenschappen, die eigenschappen van een object zijn.
Als u de statische eigenschappen van een klasse wilt ophalen, gebruikt u de parameter Statisch van de cmdlet Get-Member.
Met de volgende opdracht worden bijvoorbeeld de statische eigenschappen van de System.DateTime
klasse ophaalt.
Get-Date | Get-Member -MemberType Property -Static
TypeName: System.DateTime
Name 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;}
Gebruik de volgende syntaxis om de waarde van een statische eigenschap op te halen.
[<ClassName>]::<Property>
Met de volgende opdracht wordt bijvoorbeeld de waarde opgehaald van de statische eigenschap UtcNow van de System.DateTime
klasse.
[System.DateTime]::UtcNow
Eigenschappen van scalaire objecten en verzamelingen
De eigenschappen van een (scalair) object van een bepaald type verschillen vaak van de eigenschappen van een verzameling objecten van hetzelfde type. Elke service heeft bijvoorbeeld de eigenschap DisplayName , maar een verzameling services heeft geen eigenschap DisplayName .
Met de volgende opdracht wordt de waarde opgehaald van de eigenschap DisplayName van de service 'Audiosrv'.
(Get-Service Audiosrv).DisplayName
Windows Audio
Vanaf PowerShell 3.0 probeert PowerShell scriptfouten te voorkomen die het gevolg zijn van de verschillende eigenschappen van scalaire objecten en verzamelingen. Dezelfde opdracht retourneert de waarde van de eigenschap DisplayName van elke service die Get-Service
retourneert.
(Get-Service).DisplayName
Application Experience
Application Layer Gateway Service
Windows All-User Install Agent
Application Identity
Application Information
...
Wanneer u een verzameling indient, maar een eigenschap aanvraagt die alleen voor één (scalaire) objecten bestaat, retourneert PowerShell de waarde van die eigenschap voor elk object in de verzameling.
Alle verzamelingen hebben een eigenschap Count die als resultaat geeft hoeveel objecten de verzameling bevat.
(Get-Service).Count
176
Als u vanaf PowerShell 3.0 de eigenschap Count of Length van nulobjecten of één object aanvraagt, retourneert PowerShell de juiste waarde.
(Get-Service Audiosrv).Count
1
Als er een eigenschap bestaat op de afzonderlijke objecten en in de verzameling, wordt alleen de eigenschap van de verzameling geretourneerd.
$collection = @(
[pscustomobject]@{length = "foo"}
[pscustomobject]@{length = "bar"}
)
# PowerShell returns the collection's Length.
$collection.length
2
Deze functie werkt ook op methoden van scalaire objecten en verzamelingen. Zie about_Methods voor meer informatie.