Delen via


Hoofdstuk 3: Objecten, eigenschappen en methoden detecteren

PowerShell is een objectgeoriënteerde scripttaal. Het vertegenwoordigt gegevens- en systeemstatussen met behulp van gestructureerde objecten die zijn afgeleid van .NET-klassen die zijn gedefinieerd in .NET Framework. Door gebruik te maken van .NET Framework biedt PowerShell toegang tot verschillende systeemmogelijkheden, zoals bestandssysteem-, register- en WMI-klassen (Windows Management Instrumentation). PowerShell heeft ook toegang tot de .NET Framework-klassebibliotheek, die een uitgebreide verzameling klassen bevat die u kunt gebruiken om robuuste PowerShell-scripts te ontwikkelen.

In PowerShell is elk item of elke status een exemplaar van een object dat kan worden verkend en gemanipuleerd. De Get-Member cmdlet is een van de primaire hulpprogramma's van PowerShell voor objectdetectie, waarmee de kenmerken van een object worden weergegeven. In dit hoofdstuk wordt uitgelegd hoe PowerShell gebruikmaakt van objecten en hoe u deze objecten kunt detecteren en manipuleren om uw scripts te stroomlijnen en uw systemen efficiënter te beheren.

Vereisten

Als u de specifieke voorbeelden in dit hoofdstuk wilt volgen, moet u ervoor zorgen dat uw labomgevingcomputer deel uitmaakt van het Active Directory-domein van uw labomgeving. U moet ook de Active Directory PowerShell-module installeren die is gebundeld met de Windows Remote Server Administration Tools (RSAT). Als u Windows 10 build 1809 of hoger gebruikt, inclusief Windows 11, kunt u RSAT installeren als een Windows-functie.

Notitie

Active Directory wordt niet ondersteund voor Windows Home-edities.

Get-Member

Get-Member biedt inzicht in de objecten, eigenschappen en methoden die zijn gekoppeld aan PowerShell-opdrachten. U kunt elke PowerShell-opdracht doorsluisen die objectuitvoer produceert naar Get-Member. Wanneer u de uitvoer van een opdracht doorsluist naar Get-Member, wordt de structuur van het object weergegeven dat door de opdracht wordt geretourneerd, waarin de eigenschappen en methoden worden beschreven.

  • Eigenschappen: de kenmerken van een object.
  • Methoden: De acties die u op een object kunt uitvoeren.

Om dit concept te illustreren, kunt u een rijbewijs beschouwen als een analogie. Net als elk object heeft een rijbewijs eigenschappen, zoals oogkleur, die doorgaans waarden blue en waarden bevatbrown. Methoden vertegenwoordigen daarentegen acties die u op het object kunt uitvoeren. Revoke is bijvoorbeeld een methode die de afdeling motorvoertuigen kan uitvoeren op een rijbewijs.

Eigenschappen

Gebruik de Get-Service cmdlet om details over de Windows Time-service op uw systeem op te halen met behulp van PowerShell.

Get-Service -Name w32time

De resultaten bevatten de eigenschappen Status, Name en DisplayName . De eigenschap Status geeft aan dat de service is Running. De waarde voor de eigenschap Name is w32timeen de waarde voor de eigenschap DisplayName is Windows Time.

Status   Name               DisplayName
------   ----               -----------
Running  w32time            Windows Time

Als u alle beschikbare eigenschappen en methoden wilt Get-Serviceweergeven, kunt u deze doorsluisen naar Get-Member.

Get-Service -Name w32time | Get-Member

De resultaten geven aan dat de eerste regel één stukje belangrijke informatie bevat. TypeName identificeert het type object dat wordt geretourneerd, wat in dit voorbeeld een System.ServiceProcess.ServiceController-object is. Deze naam wordt vaak afgekort tot het laatste deel van de TypeName, zoals ServiceController, in dit voorbeeld.

   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
RequiredServices          AliasProperty RequiredServices = ServicesDepend...
Disposed                  Event         System.EventHandler Disposed(Syst...
Close                     Method        void Close()
Continue                  Method        void Continue()
CreateObjRef              Method        System.Runtime.Remoting.ObjRef Cr...
Dispose                   Method        void Dispose(), void IDisposable....
Equals                    Method        bool Equals(System.Object obj)
ExecuteCommand            Method        void ExecuteCommand(int command)
GetHashCode               Method        int GetHashCode()
GetLifetimeService        Method        System.Object GetLifetimeService()
GetType                   Method        type GetType()
InitializeLifetimeService Method        System.Object InitializeLifetimeS...
Pause                     Method        void Pause()
Refresh                   Method        void Refresh()
Start                     Method        void Start(), void Start(string[]...
Stop                      Method        void Stop()
WaitForStatus             Method        void WaitForStatus(System.Service...
CanPauseAndContinue       Property      bool CanPauseAndContinue {get;}
CanShutdown               Property      bool CanShutdown {get;}
CanStop                   Property      bool CanStop {get;}
Container                 Property      System.ComponentModel.IContainer ...
DependentServices         Property      System.ServiceProcess.ServiceCont...
DisplayName               Property      string DisplayName {get;set;}
MachineName               Property      string MachineName {get;set;}
ServiceHandle             Property      System.Runtime.InteropServices.Sa...
ServiceName               Property      string ServiceName {get;set;}
ServicesDependedOn        Property      System.ServiceProcess.ServiceCont...
ServiceType               Property      System.ServiceProcess.ServiceType...
Site                      Property      System.ComponentModel.ISite Site ...
StartType                 Property      System.ServiceProcess.ServiceStar...
Status                    Property      System.ServiceProcess.ServiceCont...
ToString                  ScriptMethod  System.Object ToString();

Let op wanneer u doorsluist Get-Service naar Get-Member, er meer eigenschappen zijn dan standaard wordt weergegeven. Hoewel deze aanvullende eigenschappen niet standaard worden weergegeven, kunt u ze selecteren door te sluisen naar Select-Object en de parameter Eigenschap te gebruiken. In het volgende voorbeeld worden alle eigenschappen geselecteerd door de resultaten van Get-Service aan en Select-Object het * jokerteken op te geven als de waarde voor de parameter Eigenschap .

Get-Service -Name w32time | Select-Object -Property *

PowerShell retourneert standaard vier eigenschappen als een tabel en vijf of meer als een lijst. Sommige opdrachten passen echter aangepaste opmaak toe om het standaardaantal eigenschappen te overschrijven dat in een tabel wordt weergegeven. U kunt deze standaardinstellingen handmatig gebruiken Format-Table en Format-List overschrijven.

Name                : w32time
RequiredServices    : {}
CanPauseAndContinue : False
CanShutdown         : True
CanStop             : True
DisplayName         : Windows Time
DependentServices   : {}
MachineName         : .
ServiceName         : w32time
ServicesDependedOn  : {}
ServiceHandle       :
Status              : Running
ServiceType         : Win32OwnProcess, Win32ShareProcess
StartType           : Manual
Site                :
Container           :

Specifieke eigenschappen kunnen ook worden geselecteerd met behulp van een door komma's gescheiden lijst als de waarde van de parameter Eigenschap .

Get-Service -Name w32time |
    Select-Object -Property Status, Name, DisplayName, ServiceType
 Status Name    DisplayName                         ServiceType
 ------ ----    -----------                         -----------
Running w32time Windows Time Win32OwnProcess, Win32ShareProcess

U kunt jokertekens gebruiken bij het opgeven van eigenschapsnamen met Select-Object.

Gebruik Can* in het volgende voorbeeld als een van de waarden voor de parameter Eigenschap om alle eigenschappen te retourneren die beginnen met Can. Deze omvatten CanPauseAndContinue, CanShutdown en CanStop.

Get-Service -Name w32time |
    Select-Object -Property Status, DisplayName, Can*

U ziet dat er meer eigenschappen worden weergegeven dan standaard wordt weergegeven.

Status              : Running
DisplayName         : Windows Time
CanPauseAndContinue : False
CanShutdown         : True
CanStop             : True

Methoden

Methoden zijn acties die u op een object kunt uitvoeren. Gebruik de parameter MemberType om de resultaten Get-Member te beperken om alleen de methoden voor Get-Serviceweer te geven.

Get-Service -Name w32time | Get-Member -MemberType Method

Zoals u kunt zien, zijn er verschillende methoden.

   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType Definition
----                      ---------- ----------
Close                     Method     void Close()
Continue                  Method     void Continue()
CreateObjRef              Method     System.Runtime.Remoting.ObjRef Creat...
Dispose                   Method     void Dispose(), void IDisposable.Dis...
Equals                    Method     bool Equals(System.Object obj)
ExecuteCommand            Method     void ExecuteCommand(int command)
GetHashCode               Method     int GetHashCode()
GetLifetimeService        Method     System.Object GetLifetimeService()
GetType                   Method     type GetType()
InitializeLifetimeService Method     System.Object InitializeLifetimeServ...
Pause                     Method     void Pause()
Refresh                   Method     void Refresh()
Start                     Method     void Start(), void Start(string[] args)
Stop                      Method     void Stop()
WaitForStatus             Method     void WaitForStatus(System.ServicePro...

U kunt de stopmethode gebruiken om een Windows-service te stoppen. U moet deze opdracht uitvoeren vanuit een PowerShell-sessie met verhoogde bevoegdheid.

(Get-Service -Name w32time).Stop()

Voer een query uit op de status van de Windows Time-service om te bevestigen dat deze is gestopt.

Get-Service -Name w32time
Status   Name               DisplayName
------   ----               -----------
Stopped  w32time            Windows Time

U kunt methoden spaarzaam gebruiken, maar u moet er rekening mee houden. Soms vindt Get-* u opdrachten zonder een bijbehorende Set-* opdracht. Vaak kunt u een methode vinden om een Set-* actie uit te voeren in dit scenario. De Get-SqlAgentJob cmdlet in de SqlServer PowerShell-module is een uitstekend voorbeeld. Er bestaat geen bijbehorende Set-* cmdlet, maar u kunt een methode gebruiken om dezelfde taak te voltooien. Zie het overzicht van SQL Server PowerShell voor meer informatie over de SqlServer PowerShell-module en installatie-instructies.

Een andere reden om op de hoogte te zijn van methoden is dat sommige PowerShell-gebruikers ervan uitgaan dat u geen destructieve wijzigingen Get-* met opdrachten kunt aanbrengen, maar dat ze ernstige problemen kunnen veroorzaken als deze worden misbruikt.

Een betere optie is om een toegewezen cmdlet te gebruiken als er een bestaat om een actie uit te voeren. Gebruik bijvoorbeeld de Start-Service cmdlet om de Windows Time-service te starten.

Standaard worden, Start-Servicezoals de startmethode van Get-Service, geen resultaten geretourneerd. Een van de voordelen van het gebruik van een cmdlet is echter dat het vaak extra mogelijkheden biedt die niet beschikbaar zijn met een methode.

In het volgende voorbeeld gebruikt u de parameter PassThru , waardoor een cmdlet die doorgaans geen uitvoer produceert, uitvoer genereert om uitvoer te genereren.

Omdat PowerShell niet aan UAC (User Access Control) deelneemt, moet u opdrachten uitvoeren waarvoor uitbreiding is vereist, zoals Start-Service, vanuit een PowerShell-sessie met verhoogde bevoegdheden.

Get-Service -Name w32time | Start-Service -PassThru
Status   Name               DisplayName
------   ----               -----------
Running  w32time            Windows Time

Notitie

Wanneer u met PowerShell-cmdlets werkt, is het belangrijk om te voorkomen dat er veronderstellingen over hun uitvoer worden gemaakt.

Gebruik de Get-Process cmdlet om informatie op te halen over het PowerShell-proces dat wordt uitgevoerd op uw labomgevingscomputer.

Get-Process -Name powershell
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    710      31    55692      70580       0.72   9436   2 powershell

Als u de beschikbare eigenschappen wilt bepalen, sluist Get-Process u naar Get-Member.

Get-Process -Name powershell | Get-Member

Wanneer u de Get-Process opdracht gebruikt, ziet u mogelijk dat sommige eigenschappen die standaard worden weergegeven ontbreken wanneer u de resultaten van Get-Member. Dit gedrag komt doordat verschillende waarden die standaard worden weergegeven, zoals NPM(K), PM(K), WS(K)en CPU(s), berekende eigenschappen zijn. U moet opdrachten doorsluisen om de werkelijke eigenschapsnamen te Get-Member bepalen.

   TypeName: System.Diagnostics.Process

Name                       MemberType     Definition
----                       ----------     ----------
Handles                    AliasProperty  Handles = Handlecount
Name                       AliasProperty  Name = ProcessName
NPM                        AliasProperty  NPM = NonpagedSystemMemorySize64
PM                         AliasProperty  PM = PagedMemorySize64
SI                         AliasProperty  SI = SessionId
VM                         AliasProperty  VM = VirtualMemorySize64
WS                         AliasProperty  WS = WorkingSet64
Disposed                   Event          System.EventHandler Disposed(Sy...
ErrorDataReceived          Event          System.Diagnostics.DataReceived...
Exited                     Event          System.EventHandler Exited(Syst...
OutputDataReceived         Event          System.Diagnostics.DataReceived...
BeginErrorReadLine         Method         void BeginErrorReadLine()
BeginOutputReadLine        Method         void BeginOutputReadLine()
CancelErrorRead            Method         void CancelErrorRead()
CancelOutputRead           Method         void CancelOutputRead()
Close                      Method         void Close()
CloseMainWindow            Method         bool CloseMainWindow()
CreateObjRef               Method         System.Runtime.Remoting.ObjRef ...
Dispose                    Method         void Dispose(), void IDisposabl...
Equals                     Method         bool Equals(System.Object obj)
GetHashCode                Method         int GetHashCode()
GetLifetimeService         Method         System.Object GetLifetimeService()
GetType                    Method         type GetType()
InitializeLifetimeService  Method         System.Object InitializeLifetim...
Kill                       Method         void Kill()
Refresh                    Method         void Refresh()
Start                      Method         bool Start()
ToString                   Method         string ToString()
WaitForExit                Method         bool WaitForExit(int millisecon...
WaitForInputIdle           Method         bool WaitForInputIdle(int milli...
__NounName                 NoteProperty   string __NounName=Process
BasePriority               Property       int BasePriority {get;}
Container                  Property       System.ComponentModel.IContaine...
EnableRaisingEvents        Property       bool EnableRaisingEvents {get;s...
ExitCode                   Property       int ExitCode {get;}
ExitTime                   Property       datetime ExitTime {get;}
Handle                     Property       System.IntPtr Handle {get;}
HandleCount                Property       int HandleCount {get;}
HasExited                  Property       bool HasExited {get;}
Id                         Property       int Id {get;}
MachineName                Property       string MachineName {get;}
MainModule                 Property       System.Diagnostics.ProcessModul...
MainWindowHandle           Property       System.IntPtr MainWindowHandle ...
MainWindowTitle            Property       string MainWindowTitle {get;}
MaxWorkingSet              Property       System.IntPtr MaxWorkingSet {ge...
MinWorkingSet              Property       System.IntPtr MinWorkingSet {ge...
Modules                    Property       System.Diagnostics.ProcessModul...
NonpagedSystemMemorySize   Property       int NonpagedSystemMemorySize {g...
NonpagedSystemMemorySize64 Property       long NonpagedSystemMemorySize64...
PagedMemorySize            Property       int PagedMemorySize {get;}
PagedMemorySize64          Property       long PagedMemorySize64 {get;}
PagedSystemMemorySize      Property       int PagedSystemMemorySize {get;}
PagedSystemMemorySize64    Property       long PagedSystemMemorySize64 {g...
PeakPagedMemorySize        Property       int PeakPagedMemorySize {get;}
PeakPagedMemorySize64      Property       long PeakPagedMemorySize64 {get;}
PeakVirtualMemorySize      Property       int PeakVirtualMemorySize {get;}
PeakVirtualMemorySize64    Property       long PeakVirtualMemorySize64 {g...
PeakWorkingSet             Property       int PeakWorkingSet {get;}
PeakWorkingSet64           Property       long PeakWorkingSet64 {get;}
PriorityBoostEnabled       Property       bool PriorityBoostEnabled {get;...
PriorityClass              Property       System.Diagnostics.ProcessPrior...
PrivateMemorySize          Property       int PrivateMemorySize {get;}
PrivateMemorySize64        Property       long PrivateMemorySize64 {get;}
PrivilegedProcessorTime    Property       timespan PrivilegedProcessorTim...
ProcessName                Property       string ProcessName {get;}
ProcessorAffinity          Property       System.IntPtr ProcessorAffinity...
Responding                 Property       bool Responding {get;}
SafeHandle                 Property       Microsoft.Win32.SafeHandles.Saf...
SessionId                  Property       int SessionId {get;}
Site                       Property       System.ComponentModel.ISite Sit...
StandardError              Property       System.IO.StreamReader Standard...
StandardInput              Property       System.IO.StreamWriter Standard...
StandardOutput             Property       System.IO.StreamReader Standard...
StartInfo                  Property       System.Diagnostics.ProcessStart...
StartTime                  Property       datetime StartTime {get;}
SynchronizingObject        Property       System.ComponentModel.ISynchron...
Threads                    Property       System.Diagnostics.ProcessThrea...
TotalProcessorTime         Property       timespan TotalProcessorTime {get;}
UserProcessorTime          Property       timespan UserProcessorTime {get;}
VirtualMemorySize          Property       int VirtualMemorySize {get;}
VirtualMemorySize64        Property       long VirtualMemorySize64 {get;}
WorkingSet                 Property       int WorkingSet {get;}
WorkingSet64               Property       long WorkingSet64 {get;}
PSConfiguration            PropertySet    PSConfiguration {Name, Id, Prio...
PSResources                PropertySet    PSResources {Name, Id, Handleco...
Company                    ScriptProperty System.Object Company {get=$thi...
CPU                        ScriptProperty System.Object CPU {get=$this.To...
Description                ScriptProperty System.Object Description {get=...
FileVersion                ScriptProperty System.Object FileVersion {get=...
Path                       ScriptProperty System.Object Path {get=$this.M...
Product                    ScriptProperty System.Object Product {get=$thi...
ProductVersion             ScriptProperty System.Object ProductVersion {g...

U kunt geen opdracht doorsluisen naar Get-Member die geen uitvoer genereert. Omdat Start-Service er niet standaard uitvoer wordt geproduceerd, wordt geprobeerd om deze te doorsluisen naar Get-Member een fout.

Start-Service -Name w32time | Get-Member

Notitie

Als u wilt doorsluisen naar Get-Member, moet een opdracht uitvoer op basis van objecten produceren.

Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:31
+ Start-Service -Name w32time | Get-Member
+                               ~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperation
   Exception
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Comma
   nds.GetMemberCommand

Als u deze fout wilt voorkomen, geeft u de parameter PassThru op met Start-Service. Zoals eerder vermeld, veroorzaakt het toevoegen van de parameter PassThru een cmdlet die meestal geen uitvoer produceert om uitvoer te genereren.

Start-Service -Name w32time -PassThru | Get-Member
   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
RequiredServices          AliasProperty RequiredServices = ServicesDepend...
Disposed                  Event         System.EventHandler Disposed(Syst...
Close                     Method        void Close()
Continue                  Method        void Continue()
CreateObjRef              Method        System.Runtime.Remoting.ObjRef Cr...
Dispose                   Method        void Dispose(), void IDisposable....
Equals                    Method        bool Equals(System.Object obj)
ExecuteCommand            Method        void ExecuteCommand(int command)
GetHashCode               Method        int GetHashCode()
GetLifetimeService        Method        System.Object GetLifetimeService()
GetType                   Method        type GetType()
InitializeLifetimeService Method        System.Object InitializeLifetimeS...
Pause                     Method        void Pause()
Refresh                   Method        void Refresh()
Start                     Method        void Start(), void Start(string[]...
Stop                      Method        void Stop()
WaitForStatus             Method        void WaitForStatus(System.Service...
CanPauseAndContinue       Property      bool CanPauseAndContinue {get;}
CanShutdown               Property      bool CanShutdown {get;}
CanStop                   Property      bool CanStop {get;}
Container                 Property      System.ComponentModel.IContainer ...
DependentServices         Property      System.ServiceProcess.ServiceCont...
DisplayName               Property      string DisplayName {get;set;}
MachineName               Property      string MachineName {get;set;}
ServiceHandle             Property      System.Runtime.InteropServices.Sa...
ServiceName               Property      string ServiceName {get;set;}
ServicesDependedOn        Property      System.ServiceProcess.ServiceCont...
ServiceType               Property      System.ServiceProcess.ServiceType...
Site                      Property      System.ComponentModel.ISite Site ...
StartType                 Property      System.ServiceProcess.ServiceStar...
Status                    Property      System.ServiceProcess.ServiceCont...
ToString                  ScriptMethod  System.Object ToString();

Out-Host is ontworpen om uitvoer rechtstreeks in de PowerShell-host weer te geven en produceert geen uitvoer op basis van objecten. Als gevolg hiervan kunt u de uitvoer niet doorsluisen naar Get-Member, waarvoor objectgebaseerde invoer is vereist.

Get-Service -Name w32time | Out-Host | Get-Member
Status   Name               DisplayName
------   ----               -----------
Running  w32time            Windows Time

Get-Member : You must specify an object for the Get-Member cmdlet.
At line:1 char:40
+ Get-Service -Name w32time | Out-Host | Get-Member
+                                        ~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperation
   Exception
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Comma
   nds.GetMemberCommand

Get-Command

Als u weet welk type object een opdracht produceert, kunt u zoeken naar opdrachten die dat type object als invoer accepteren.

Get-Command -ParameterType ServiceController

De volgende opdrachten accepteren een ServiceController-object via pijplijn- of parameterinvoer.

CommandType     Name                                               Version
-----------     ----                                               -------
Cmdlet          Get-Service                                        3.1.0.0
Cmdlet          Restart-Service                                    3.1.0.0
Cmdlet          Resume-Service                                     3.1.0.0
Cmdlet          Set-Service                                        3.1.0.0
Cmdlet          Start-Service                                      3.1.0.0
Cmdlet          Stop-Service                                       3.1.0.0
Cmdlet          Suspend-Service                                    3.1.0.0

Active Directory

Notitie

Zoals vermeld in de hoofdstukvereisten, moet u ervoor zorgen dat RSAT is geïnstalleerd voor deze sectie. Daarnaast moet uw labomgevingcomputer lid zijn van uw active Directory-domein voor de labomgeving.

Als u de opdrachten wilt identificeren die zijn toegevoegd aan de ActiveDirectory PowerShell-module nadat u RSAT hebt geïnstalleerd, gebruikt Get-Command u deze in combinatie met de moduleparameter . In het volgende voorbeeld ziet u alle opdrachten die beschikbaar zijn in de ActiveDirectory-module .

Get-Command -Module ActiveDirectory

De ActiveDirectory PowerShell-module heeft in totaal 147 opdrachten toegevoegd.

Hebt u de naamconventie van deze opdrachten waargenomen? De zelfstandige naamwoorden in de opdrachtnamen worden voorafgegaan door AD om mogelijke naamconflicten met opdrachten in andere modules te voorkomen. Dit voorvoegsel is een veelvoorkomende procedure voor PowerShell-modules.

CommandType     Name                                               Version
-----------     ----                                               -------
Cmdlet          Add-ADCentralAccessPolicyMember                    1.0.1.0
Cmdlet          Add-ADComputerServiceAccount                       1.0.1.0
Cmdlet          Add-ADDomainControllerPasswordReplicationPolicy    1.0.1.0
Cmdlet          Add-ADFineGrainedPasswordPolicySubject             1.0.1.0
Cmdlet          Add-ADGroupMember                                  1.0.1.0
Cmdlet          Add-ADPrincipalGroupMembership                     1.0.1.0
Cmdlet          Add-ADResourcePropertyListMember                   1.0.1.0
Cmdlet          Clear-ADAccountExpiration                          1.0.1.0
Cmdlet          Clear-ADClaimTransformLink                         1.0.1.0
Cmdlet          Disable-ADAccount                                  1.0.1.0
...

De cmdlet haalt standaard Get-ADUser een beperkte set eigenschappen voor gebruikersobjecten op en beperkt de uitvoer ervan tot de eerste 1000 gebruikers. Deze beperking is een optimalisatie van prestaties die is ontworpen om overweldigende Active Directory te voorkomen met overmatig ophalen van gegevens.

Get-ADUser -Identity mike | Get-Member -MemberType Properties

Zelfs als u alleen een basiskennis van Active Directory hebt, kunt u herkennen dat een gebruikersaccount meer eigenschappen heeft dan in het voorbeeld.

   TypeName: Microsoft.ActiveDirectory.Management.ADUser

Name              MemberType Definition                                     
----              ---------- ----------                                     
DistinguishedName Property   System.String DistinguishedName {get;set;}     
Enabled           Property   System.Boolean Enabled {get;set;}              
GivenName         Property   System.String GivenName {get;set;}             
Name              Property   System.String Name {get;}                      
ObjectClass       Property   System.String ObjectClass {get;set;}           
ObjectGUID        Property   System.Nullable`1[[System.Guid, mscorlib, Ve...
SamAccountName    Property   System.String SamAccountName {get;set;}        
SID               Property   System.Security.Principal.SecurityIdentifier...
Surname           Property   System.String Surname {get;set;}               
UserPrincipalName Property   System.String UserPrincipalName {get;set;}

De Get-ADUser cmdlet bevat een parameter Properties om extra eigenschappen op te geven dan de standaardwaarden die u wilt ophalen. Als u alle eigenschappen wilt retourneren, gebruikt u het * jokerteken als parameterwaarde.

Get-ADUser -Identity mike -Properties * | Get-Member -MemberType Properties
   TypeName: Microsoft.ActiveDirectory.Management.ADUser

Name                                 MemberType Definition                  
----                                 ---------- ----------                  
AccountExpirationDate                Property   System.DateTime AccountEx...
accountExpires                       Property   System.Int64 accountExpir...
AccountLockoutTime                   Property   System.DateTime AccountLo...
AccountNotDelegated                  Property   System.Boolean AccountNot...
AllowReversiblePasswordEncryption    Property   System.Boolean AllowRever...
AuthenticationPolicy                 Property   Microsoft.ActiveDirectory...
AuthenticationPolicySilo             Property   Microsoft.ActiveDirectory...
BadLogonCount                        Property   System.Int32 BadLogonCoun...
badPasswordTime                      Property   System.Int64 badPasswordT...
badPwdCount                          Property   System.Int32 badPwdCount ...
CannotChangePassword                 Property   System.Boolean CannotChan...
CanonicalName                        Property   System.String CanonicalNa...
Certificates                         Property   Microsoft.ActiveDirectory...
City                                 Property   System.String City {get;s...
CN                                   Property   System.String CN {get;}     
codePage                             Property   System.Int32 codePage {ge...
Company                              Property   System.String Company {ge...
CompoundIdentitySupported            Property   Microsoft.ActiveDirectory...
Country                              Property   System.String Country {ge...
countryCode                          Property   System.Int32 countryCode ...
Created                              Property   System.DateTime Created {...
createTimeStamp                      Property   System.DateTime createTim...
Deleted                              Property   System.Boolean Deleted {g...
Department                           Property   System.String Department ...
Description                          Property   System.String Description...
DisplayName                          Property   System.String DisplayName...
DistinguishedName                    Property   System.String Distinguish...
Division                             Property   System.String Division {g...
DoesNotRequirePreAuth                Property   System.Boolean DoesNotReq...
dSCorePropagationData                Property   Microsoft.ActiveDirectory...
EmailAddress                         Property   System.String EmailAddres...
EmployeeID                           Property   System.String EmployeeID ...
EmployeeNumber                       Property   System.String EmployeeNum...
Enabled                              Property   System.Boolean Enabled {g...
Fax                                  Property   System.String Fax {get;set;}
GivenName                            Property   System.String GivenName {...
HomeDirectory                        Property   System.String HomeDirecto...
HomedirRequired                      Property   System.Boolean HomedirReq...
HomeDrive                            Property   System.String HomeDrive {...
HomePage                             Property   System.String HomePage {g...
HomePhone                            Property   System.String HomePhone {...
Initials                             Property   System.String Initials {g...
instanceType                         Property   System.Int32 instanceType...
isDeleted                            Property   System.Boolean isDeleted ...
KerberosEncryptionType               Property   Microsoft.ActiveDirectory...
LastBadPasswordAttempt               Property   System.DateTime LastBadPa...
LastKnownParent                      Property   System.String LastKnownPa...
lastLogoff                           Property   System.Int64 lastLogoff {...
lastLogon                            Property   System.Int64 lastLogon {g...
LastLogonDate                        Property   System.DateTime LastLogon...
lastLogonTimestamp                   Property   System.Int64 lastLogonTim...
LockedOut                            Property   System.Boolean LockedOut ...
logonCount                           Property   System.Int32 logonCount {...
LogonWorkstations                    Property   System.String LogonWorkst...
Manager                              Property   System.String Manager {ge...
MemberOf                             Property   Microsoft.ActiveDirectory...
MNSLogonAccount                      Property   System.Boolean MNSLogonAc...
MobilePhone                          Property   System.String MobilePhone...
Modified                             Property   System.DateTime Modified ...
modifyTimeStamp                      Property   System.DateTime modifyTim...
msDS-User-Account-Control-Computed   Property   System.Int32 msDS-User-Ac...
Name                                 Property   System.String Name {get;}   
nTSecurityDescriptor                 Property   System.DirectoryServices....
ObjectCategory                       Property   System.String ObjectCateg...
ObjectClass                          Property   System.String ObjectClass...
ObjectGUID                           Property   System.Nullable`1[[System...
objectSid                            Property   System.Security.Principal...
Office                               Property   System.String Office {get...
OfficePhone                          Property   System.String OfficePhone...
Organization                         Property   System.String Organizatio...
OtherName                            Property   System.String OtherName {...
PasswordExpired                      Property   System.Boolean PasswordEx...
PasswordLastSet                      Property   System.DateTime PasswordL...
PasswordNeverExpires                 Property   System.Boolean PasswordNe...
PasswordNotRequired                  Property   System.Boolean PasswordNo...
POBox                                Property   System.String POBox {get;...
PostalCode                           Property   System.String PostalCode ...
PrimaryGroup                         Property   System.String PrimaryGrou...
primaryGroupID                       Property   System.Int32 primaryGroup...
PrincipalsAllowedToDelegateToAccount Property   Microsoft.ActiveDirectory...
ProfilePath                          Property   System.String ProfilePath...
ProtectedFromAccidentalDeletion      Property   System.Boolean ProtectedF...
pwdLastSet                           Property   System.Int64 pwdLastSet {...
SamAccountName                       Property   System.String SamAccountN...
sAMAccountType                       Property   System.Int32 sAMAccountTy...
ScriptPath                           Property   System.String ScriptPath ...
sDRightsEffective                    Property   System.Int32 sDRightsEffe...
ServicePrincipalNames                Property   Microsoft.ActiveDirectory...
SID                                  Property   System.Security.Principal...
SIDHistory                           Property   Microsoft.ActiveDirectory...
SmartcardLogonRequired               Property   System.Boolean SmartcardL...
sn                                   Property   System.String sn {get;set;} 
State                                Property   System.String State {get;...
StreetAddress                        Property   System.String StreetAddre...
Surname                              Property   System.String Surname {ge...
Title                                Property   System.String Title {get;...
TrustedForDelegation                 Property   System.Boolean TrustedFor...
TrustedToAuthForDelegation           Property   System.Boolean TrustedToA...
UseDESKeyOnly                        Property   System.Boolean UseDESKeyO...
userAccountControl                   Property   System.Int32 userAccountC...
userCertificate                      Property   Microsoft.ActiveDirectory...
UserPrincipalName                    Property   System.String UserPrincip...
uSNChanged                           Property   System.Int64 uSNChanged {...
uSNCreated                           Property   System.Int64 uSNCreated {...
whenChanged                          Property   System.DateTime whenChang...
whenCreated                          Property   System.DateTime whenCreat...

De standaardconfiguratie voor het ophalen van eigenschappen van Active Directory-gebruikersaccounts is opzettelijk beperkt om prestatieproblemen te voorkomen. Als u elke eigenschap wilt retourneren voor elk gebruikersaccount in uw Active Directory-productieomgeving, kunnen de prestaties van uw domeincontrollers en het netwerk ernstig afnemen. Meestal hebt u alleen specifieke eigenschappen nodig voor bepaalde gebruikers. Het retourneren van alle eigenschappen voor één gebruiker is echter redelijk bij het identificeren van de beschikbare eigenschappen.

Het is niet ongebruikelijk dat u een opdracht meerdere keren uitvoert wanneer u deze prototypen maakt. Als u verwacht een resourceintensieve query uit te voeren bij het prototypen van een opdracht, kunt u overwegen deze eenmaal uit te voeren en de resultaten op te slaan in een variabele. Vervolgens kunt u efficiënter met de inhoud van de variabele werken dan herhaaldelijk een resource-intensieve query uitvoeren.

Met de volgende opdracht worden bijvoorbeeld alle eigenschappen voor een gebruikersaccount opgehaald en worden de resultaten opgeslagen in een variabele met de naam $Users. Werk met de inhoud van de $Users variabele in plaats van de opdracht meerdere keren uit te Get-ADUser voeren. Vergeet niet dat de inhoud van de variabele niet automatisch wordt bijgewerkt wanneer de gegevens van een gebruiker in Active Directory worden gewijzigd.

$Users = Get-ADUser -Identity mike -Properties *

U kunt de beschikbare eigenschappen verkennen door de $Users variabele door te ssluisen naar Get-Member.

$Users | Get-Member -MemberType Properties

Als u specifieke eigenschappen zoals Naam, LastLogonDate Met deze methode worden de gewenste eigenschappen en de bijbehorende waarden weergegeven op basis van de inhoud van de $Users variabele, waardoor er geen query's meer nodig zijn voor Active Directory. Het is een efficiëntere benadering dan het herhaaldelijk uitvoeren van de Get-ADUser opdracht.

$Users | Select-Object -Property Name, LastLogonDate, LastBadPasswordAttempt

Wanneer u een query uitvoert op Active Directory, filtert u de gegevens in de bron met behulp van de parameter Eigenschappen om Get-ADUser alleen de benodigde eigenschappen te retourneren.

Get-ADUser -Identity mike -Properties LastLogonDate, LastBadPasswordAttempt
DistinguishedName      : CN=Mike F. Robbins,CN=Users,DC=mikefrobbins,DC=com
Enabled                : True
GivenName              : Mike
LastBadPasswordAttempt :
LastLogonDate          : 11/14/2023 5:10:16 AM
Name                   : Mike F. Robbins
ObjectClass            : user
ObjectGUID             : 11c7b61f-46c3-4399-9ed0-ff4e453bc2a2
SamAccountName         : mike
SID                    : S-1-5-21-611971124-518002951-3581791498-1105
Surname                : Robbins
UserPrincipalName      : μ@mikefrobbins.com

Samenvatting

In dit hoofdstuk hebt u geleerd hoe u kunt bepalen welk type object een opdracht produceert, welke eigenschappen en methoden beschikbaar zijn voor een opdracht en hoe u kunt werken met opdrachten die de standaard geretourneerde eigenschappen beperken.

Beoordelen

  1. Welk type object produceert de Get-Process cmdlet?
  2. Hoe bepaalt u wat de beschikbare eigenschappen zijn voor een opdracht?
  3. Wat moet u controleren of er een opdracht bestaat om iets op te halen, maar niet om hetzelfde in te stellen?
  4. Hoe kunnen sommige opdrachten die standaard geen uitvoer retourneren, worden gemaakt om uitvoer te genereren?
  5. Wat moet u overwegen bij het maken van een prototype van een opdracht die een grote hoeveelheid uitvoer produceert?

Verwijzingen

Volgende stappen

In hoofdstuk 4 leert u meer over één regel en de pijplijn.