Dela via


Kapitel 3 – Identifiera objekt, egenskaper och metoder

PowerShell är ett objektorienterat skriptspråk. Den representerar data- och systemtillstånd med strukturerade objekt som härletts från .NET-klasser som definierats i .NET Framework. Genom att utnyttja .NET Framework ger PowerShell åtkomst till olika systemfunktioner, inklusive filsystem, register och WMI-klasser (Windows Management Instrumentation). PowerShell har också åtkomst till .NET Framework-klassbiblioteket, som innehåller en omfattande samling klasser som du kan använda för att utveckla robusta PowerShell-skript.

I PowerShell är varje objekt eller tillstånd en instans av ett objekt som kan utforskas och manipuleras. Cmdleten Get-Member är ett av de primära verktygen som tillhandahålls av PowerShell för objektidentifiering, vilket visar ett objekts egenskaper. Det här kapitlet utforskar hur PowerShell utnyttjar objekt och hur du kan identifiera och manipulera dessa objekt för att effektivisera dina skript och hantera dina system mer effektivt.

Förutsättningar

Om du vill följa de specifika exemplen i det här kapitlet kontrollerar du att din labbmiljödator är en del av din labbmiljös Active Directory-domän. Du måste också installera Active Directory PowerShell-modulen som medföljer Windows Remote Server Administration Tools (RSAT). Om du använder Windows 10 build 1809 eller senare, inklusive Windows 11, kan du installera RSAT som en Windows-funktion.

Kommentar

Active Directory stöds inte för Windows Home-utgåvor.

Get-Member

Get-Member ger insikter om objekt, egenskaper och metoder som är associerade med PowerShell-kommandon. Du kan skicka alla PowerShell-kommandon som genererar objektbaserade utdata till Get-Member. När du skickar utdata från ett kommando till Get-Membervisas strukturen för objektet som returneras av kommandot, med information om dess egenskaper och metoder.

  • Egenskaper: Attributen för ett objekt.
  • Metoder: De åtgärder som du kan utföra på ett objekt.

För att illustrera det här konceptet bör du betrakta ett körkort som en analogi. Liksom alla objekt har ett körkort egenskaper, till exempel ögonfärg, som vanligtvis innehåller blue och brown värden. Metoderna representerar däremot åtgärder som du kan utföra på objektet. Återkalla är till exempel en metod som avdelningen för motorfordon kan utföra på ett körkort.

Egenskaper

Om du vill hämta information om Windows-tidstjänsten i systemet med hjälp av PowerShell använder du cmdleten Get-Service .

Get-Service -Name w32time

Resultatet innehåller egenskaperna Status, Namn och DisplayName . Egenskapen Status anger att tjänsten är Running. Värdet för egenskapen Namn är w32timeoch värdet för egenskapen DisplayName är Windows Time.

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

Ange alla tillgängliga egenskaper och metoder för Get-Servicegenom att skicka den till Get-Member.

Get-Service -Name w32time | Get-Member

Resultatet visar att den första raden innehåller en viktig information. TypeName identifierar vilken typ av objekt som returneras, vilket i det här exemplet är ett System.ServiceProcess.ServiceController-objekt . Det här namnet förkortas ofta till den sista delen av TypeName, till exempel ServiceController, i det här exemplet.

   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();

Observera att när du dirigerade Get-Service till Get-Memberfinns det fler egenskaper än vad som visas som standard. Även om dessa ytterligare egenskaper inte visas som standard kan du välja dem genom att skicka dem till Select-Object och använda parametern Egenskap . I följande exempel markeras alla egenskaper genom att resultatet skickas Get-Service till Select-Object och jokertecknet anges * som värde för parametern Egenskap .

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

Som standard returnerar PowerShell fyra egenskaper som en tabell och fem eller fler som en lista. Vissa kommandon använder dock anpassad formatering för att åsidosätta standardantalet egenskaper som visas i en tabell. Du kan använda Format-Table och Format-List åsidosätta dessa standardvärden manuellt.

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           :

Specifika egenskaper kan också väljas med hjälp av en kommaavgränsad lista som värdet för egenskapsparametern.

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

Du kan använda jokertecken när du anger egenskapsnamn med Select-Object.

I följande exempel använder du Can* som ett av värdena för egenskapsparametern för att returnera alla egenskaper som börjar med Can. Dessa inkluderar CanPauseAndContinue, CanShutdown och CanStop.

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

Observera att det finns fler egenskaper som visas som standard.

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

Metoder

Metoder är åtgärder som du kan utföra på ett objekt. Använd parametern MemberType för att begränsa resultatet för Get-Member för att endast visa metoderna för Get-Service.

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

Som du ser finns det flera metoder.

   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...

Du kan använda metoden Stoppa för att stoppa en Windows-tjänst. Du måste köra det här kommandot från en upphöjd PowerShell-session.

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

Fråga status för Windows-tidstjänsten för att bekräfta att den har stoppats.

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

Du kanske använder metoder sparsamt, men du bör vara medveten om dem. Ibland hittar Get-* du kommandon utan motsvarande Set-* kommando. Ofta kan du hitta en metod för att utföra en Set-* åtgärd i det här scenariot. Cmdleten Get-SqlAgentJobi SqlServer PowerShell-modulen är ett utmärkt exempel. Det finns ingen motsvarande Set-* cmdlet, men du kan använda en metod för att slutföra samma uppgift. Mer information om SqlServer PowerShell-modulen och installationsinstruktionerna finns i översikten över SQL Server PowerShell.

En annan anledning att vara medveten om metoder är att vissa PowerShell-användare antar att du inte kan göra destruktiva ändringar med Get-* kommandon, men de kan faktiskt orsaka allvarliga problem om de missbrukas.

Ett bättre alternativ är att använda en dedikerad cmdlet om det finns en för att utföra en åtgärd. Använd till exempel cmdleten Start-Service för att starta Windows-tidstjänsten.

Som standard Start-Servicereturnerar , som startmetodenGet-Serviceför , inga resultat. En av fördelarna med att använda en cmdlet är dock att den ofta ger ytterligare funktioner som inte är tillgängliga med en metod.

I följande exempel använder du parametern PassThru , vilket gör att en cmdlet som vanligtvis inte producerar utdata genererar utdata.

Eftersom PowerShell inte deltar i Användaråtkomstkontroll (UAC) måste du köra kommandon som kräver utökade privilegier, till exempel Start-Service, från en upphöjd PowerShell-session.

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

Kommentar

När du arbetar med PowerShell-cmdletar är det viktigt att du undviker att göra antaganden om deras utdata.

Om du vill hämta information om PowerShell-processen som körs på din labbmiljödator använder du cmdleten Get-Process .

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

För att fastställa tillgängliga egenskaper, rör Get-Process till Get-Member.

Get-Process -Name powershell | Get-Member

När du använder Get-Process kommandot kanske du märker att vissa egenskaper som visas som standard saknas när du visar resultatet av Get-Member. Det här beteendet beror på att flera av de värden som visas som standard, till exempel NPM(K), PM(K), WS(K)och CPU(s), är beräknade egenskaper. Du måste skicka pipe-kommandon för att Get-Member fastställa deras faktiska egenskapsnamn.

   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...

Du kan inte skicka ett kommando till Get-Member som inte genererar utdata. Eftersom Start-Service inte genererar utdata som standard resulterar det i ett fel när du försöker skicka det.Get-Member

Start-Service -Name w32time | Get-Member

Kommentar

För att skickas till Get-Membermåste ett kommando generera objektbaserade utdata.

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

Undvik det här felet genom att ange parametern PassThru med Start-Service. Som tidigare nämnts orsakar tillägg av parametern PassThru en cmdlet som vanligtvis inte producerar utdata för att generera utdata.

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 är utformad för att visa utdata direkt i PowerShell-värden och producerar inte objektbaserade utdata. Därför kan du inte skicka dess utdata till Get-Member, vilket kräver objektbaserade indata.

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

Hämta-kommando

Om du vet vilken typ av objekt ett kommando skapar kan du söka efter kommandon som accepterar den typen av objekt som indata.

Get-Command -ParameterType ServiceController

Följande kommandon accepterar ett ServiceController-objekt via pipeline- eller parameterindata.

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

Kommentar

Se till att RSAT är installerat för det här avsnittet, som du nämnde i kapitelkraven. Dessutom måste din labbmiljödator vara medlem i din labbmiljös Active Directory-domän.

Om du vill identifiera kommandon som lagts till i ActiveDirectory PowerShell-modulen när du har installerat RSAT använder Get-Command du kombinerat med modulparametern . I följande exempel visas alla kommandon som är tillgängliga i ActiveDirectory-modulen .

Get-Command -Module ActiveDirectory

ActiveDirectory PowerShell-modulen lade till totalt 147 kommandon.

Har du observerat namngivningskonventionen för dessa kommandon? Substantiven i kommandonamnen är prefix med AD för att undvika potentiella namngivningskonflikter med kommandon i andra moduler. Det här prefixet är en vanlig metod bland PowerShell-moduler.

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
...

Som standard hämtar cmdleten Get-ADUser en begränsad uppsättning egenskaper för användarobjekt och begränsar dess utdata till de första 1 000 användarna. Den här begränsningen är en prestandaoptimering som är utformad för att undvika att överbelasta Active Directory med överdriven datahämtning.

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

Även om du bara har en grundläggande förståelse för Active Directory kan du känna igen att ett användarkonto har fler egenskaper än de som visas i exemplet.

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

Cmdleten Get-ADUser innehåller en egenskapsparameter för att ange ytterligare egenskaper utöver de standardvärden som du vill hämta. Om du vill returnera alla egenskaper använder du * jokertecknet som parametervärde.

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...

Standardkonfigurationen för att hämta Active Directory-användarkontoegenskaper är avsiktligt begränsad för att undvika prestandaproblem. Om du försöker returnera varje egenskap för varje användarkonto i din Active Directory-produktionsmiljö kan det allvarligt försämra prestandan för dina domänkontrollanter och nätverk. Vanligtvis behöver du bara specifika egenskaper för vissa användare. Det är dock rimligt att returnera alla egenskaper för en enskild användare när du identifierar de tillgängliga egenskaperna.

Det är inte ovanligt att köra ett kommando flera gånger när du skapar prototyper. Om du förväntar dig att köra en resursintensiv fråga när du skapar ett kommando kan du överväga att köra den en gång och lagra resultatet i en variabel. Sedan kan du arbeta mer effektivt med variabelns innehåll än att köra en resursintensiv fråga upprepade gånger.

Följande kommando hämtar till exempel alla egenskaper för ett användarkonto och lagrar resultatet i en variabel med namnet $Users. Arbeta med innehållet i variabeln $Users i stället för att Get-ADUser köra kommandot flera gånger. Kom ihåg att variabelns innehåll inte uppdateras automatiskt när en användares information ändras i Active Directory.

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

Du kan utforska de tillgängliga egenskaperna genom att skicka variabeln $Users till Get-Member.

$Users | Get-Member -MemberType Properties

Om du vill visa specifika egenskaper som Name, LastLogonDate och LastBadPasswordAttempt, skicka variabeln $Users till Select-Object. Den här metoden visar önskade egenskaper och deras värden baserat på innehållet i variabeln $Users , vilket eliminerar behovet av flera frågor till Active Directory. Det är en mer resurseffektiv metod än att Get-ADUser köra kommandot upprepade gånger.

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

När du frågar Active Directory filtrerar du data vid källan med hjälp av parametern Get-ADUser för för att endast returnera de nödvändiga egenskaperna.

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

Sammanfattning

I det här kapitlet har du lärt dig hur du avgör vilken typ av objekt ett kommando skapar, vilka egenskaper och metoder som är tillgängliga för ett kommando och hur du arbetar med kommandon som begränsar de egenskaper som returneras som standard.

Granskning

  1. Vilken typ av objekt skapar cmdleten Get-Process ?
  2. Hur avgör du vilka tillgängliga egenskaper som är tillgängliga för ett kommando?
  3. Vad ska du kontrollera om det finns ett kommando för att hämta något men inte för att ange samma sak?
  4. Hur kan vissa kommandon som inte returnerar utdata som standard göras för att generera utdata?
  5. Vad bör du göra när du skapar prototyper för ett kommando som producerar en stor mängd utdata?

Referenser

Nästa steg

I nästa kapitel får du lära dig mer om one-liners och pipelinen.