Sdílet prostřednictvím


Kapitola 3 – Zjišťování objektů, vlastností a metod

PowerShell je objektově orientovaný skriptovací jazyk. Představuje data a systémové stavy pomocí strukturovaných objektů odvozených z tříd .NET definovaných v rozhraní .NET Framework. Díky využití rozhraní .NET Framework nabízí PowerShell přístup k různým systémovým funkcím, včetně tříd systému souborů, registru a WMI (Windows Management Instrumentation). PowerShell má také přístup k knihovně tříd rozhraní .NET Framework, která obsahuje rozsáhlou kolekci tříd, které můžete použít k vývoji robustních skriptů PowerShellu.

V PowerShellu je každá položka nebo stav instancí objektu, který je možné prozkoumat a manipulovat s ním. Rutina Get-Member je jedním z primárních nástrojů, které PowerShell poskytuje ke zjišťování objektů, což odhalí charakteristiky objektu. V této kapitole se dozvíte, jak PowerShell využívá objekty a jak tyto objekty zjistit a manipulovat s nimi, aby se zjednodušily skripty a spravily systémy efektivněji.

Požadavky

Abyste mohli postupovat podle konkrétních příkladů v této kapitole, ujistěte se, že počítač testovacího prostředí je součástí domény služby Active Directory testovacího prostředí. Musíte také nainstalovat modul Active Directory PowerShellu, který je součástí nástrojů pro vzdálenou správu windows serveru (RSAT). Pokud používáte Windows 10 build 1809 nebo novější, včetně Windows 11, můžete nástroj RSAT nainstalovat jako funkci Windows.

Poznámka:

Služba Active Directory není podporována pro edice Windows Home.

Get-Member

Get-Member poskytuje přehled o objektech, vlastnostech a metodách přidružených k příkazům PowerShellu. Můžete předat libovolný příkaz PowerShellu, který poskytuje výstup založený na objektech, do Get-Member. Když předáte výstup příkazu Get-Memberdo , odhalí strukturu objektu vráceného příkazem, podrobně jeho vlastnosti a metody.

  • Vlastnosti: Atributy objektu.
  • Metody: Akce, které můžete provést u objektu.

Pro ilustraci tohoto konceptu zvažte licenci řidiče jako analogii. Stejně jako jakýkoli objekt má řidičský průkaz vlastnosti, jako je například barva očí, které obvykle zahrnují hodnoty blue a brown. Naproti tomu metody představují akce, které můžete s objektem provádět. Odvolání je například metoda, kterou může oddělení motorových vozidel provádět na řidičské licenci.

Vlastnosti

Pokud chcete načíst podrobnosti o službě Windows Time ve vašem systému pomocí prostředí PowerShell, použijte rutinu Get-Service.

Get-Service -Name w32time

Výsledky zahrnují vlastnosti Status, Name a DisplayName . Vlastnost Status označuje, že služba je Running. Hodnota vlastnosti Name je w32timea hodnota vlastnosti DisplayName je Windows Time.

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

Chcete-li zobrazit seznam všech dostupných vlastností a metod pro Get-Service, převést jej na Get-Member.

Get-Service -Name w32time | Get-Member

Výsledky ukazují, že první řádek obsahuje jednu významnou informaci. TypeName identifikuje typ vráceného objektu, který v tomto příkladu je System.ServiceProcess.ServiceController objekt. Tento název se v tomto příkladu často zkracuje na poslední část TypeName, například ServiceController.

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

Všimněte si, že když předáte Get-ServiceGet-Member, existuje více vlastností, než je zobrazováno ve výchozím nastavení. I když se tyto další vlastnosti ve výchozím nastavení nezobrazují, můžete je vybrat propojením Select-Object a použitím parametru Property . Následující příklad vybere všechny vlastnosti propojením výsledků z Get-Service do Select-Object a zadáním znaku zástupného znaku * jako hodnoty parametru Property.

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

PowerShell ve výchozím nastavení vrátí čtyři vlastnosti jako tabulku a pět nebo více jako seznam. Některé příkazy však používají vlastní formátování k přepsání výchozího počtu vlastností zobrazených v tabulce. K přepsání těchto výchozích hodnot můžete ručně použít Format-Table a Format-List.

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           :

Konkrétní vlastnosti lze také vybrat pomocí seznamu odděleného čárkami jako hodnotu parametru Property .

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

Zástupné znaky můžete použít při zadávání názvů vlastností pomocí Select-Object.

V následujícím příkladu použijte Can* jako jednu z hodnot parametru Property vrátit všechny vlastnosti, které začínají Can. Patří mezi ně CanPauseAndContinue, CanShutdown a CanStop.

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

Všimněte si, že jsou uvedené více vlastností, než se ve výchozím nastavení zobrazuje.

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

Metody

Metody jsou akce, které můžete provést u objektu. Pomocí parametru MemberType zúžíte výsledky Get-Member zobrazení pouze metod pro Get-Service.

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

Jak vidíte, existuje několik metod.

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

K zastavení služby systému Windows můžete použít metodu Stop . Tento příkaz musíte spustit z relace PowerShellu se zvýšenými oprávněními.

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

Zadejte dotaz na stav služby Windows Time a ověřte, že je zastavený.

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

Metody můžete používat střídmě, ale měli byste o nich vědět. Někdy můžete najít Get-* příkazy bez odpovídajícího Set-* příkazu. Často můžete najít metodu Set-* pro provedení akce v tomto scénáři. Cmdlet Get-SqlAgentJob v modulu SqlServer PowerShell je skvělým příkladem. Neexistuje žádná odpovídající Set-* rutina, ale stejnou úlohu můžete dokončit pomocí metody. Další informace o modulu SqlServer PowerShell a pokyny k instalaci najdete v přehledu PROSTŘEDÍ SQL Server PowerShell.

Další důvod, proč si uvědomit o metodách, je, že někteří uživatelé PowerShellu předpokládají, že nemůžete provádět destruktivní změny pomocí Get-* příkazů, ale můžou ve skutečnosti způsobit závažné problémy, pokud je zneužito.

Lepší možností je použít vyhrazenou rutinu cmdlet, pokud existuje k provedení akce. Pomocí této rutiny Start-Service můžete například spustit službu Windows Time.

Ve výchozím nastavení nevrací žádné výsledky, Start-Servicepodobně jako metoda StartGet-Service. Jednou z výhod použití cmdletu je, že často poskytuje další možnosti, které nejsou dostupné pomocí metody.

V následujícím příkladu použijte parametr PassThru, který způsobí, že rutina, jež obvykle nevytváří výstup, nyní výstup vygeneruje.

Vzhledem k tomu, že se PowerShell neúčastní řízení uživatelských přístupů (UAC), musíte spustit příkazy, které vyžadují zvýšení oprávnění, například Start-Servicez relace PowerShellu se zvýšenými oprávněními.

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

Poznámka:

Při práci s rutinami PowerShellu je důležité se vyhnout předpokladům o jejich výstupu.

Pokud chcete načíst informace o procesu PowerShellu, který běží na vašem počítači v testovacím prostředí, použijte příkaz 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

Chcete-li určit dostupné vlastnosti, přesměrujte Get-Process do Get-Member.

Get-Process -Name powershell | Get-Member

Při použití Get-Process příkazu si můžete všimnout, že některé vlastnosti zobrazené ve výchozím nastavení chybí, když zobrazíte výsledky Get-Member. Toto chování je způsobeno tím, že několik hodnot zobrazených ve výchozím nastavení, jako jsou například NPM(K), PM(K), WS(K), a CPU(s), jsou počítané vlastnosti. Musíte přesměrovat příkazy do Get-Member, abyste určili jejich skutečné názvy vlastností.

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

Nemůžete přesměrovat příkaz na Get-Member, který nevytváří žádný výstup. Protože Start-Service ve výchozím nastavení nevytváří výstup, pokus o jeho přesměrování na Get-Member vede k chybě.

Start-Service -Name w32time | Get-Member

Poznámka:

Aby bylo možné příkaz předat do Get-Member, musí produkovat výstup založený na objektech.

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

Chcete-li se této chybě vyhnout, zadejte parametr PassThru s parametrem Start-Service. Jak jsme již zmínili, přidání parametru PassThru způsobí, že rutina, která obvykle nevytváří výstup, vytvoří výstup.

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 je navržený tak, aby zobrazoval výstup přímo v hostiteli PowerShellu a nevytvářel výstup založený na objektech. V důsledku toho nemůžete výstup převést na Get-Member, což vyžaduje vstup založený na objektech.

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

Znalost typu objektu, který příkaz vytvoří, umožňuje hledat příkazy, které přijímají tento typ objektu jako vstup.

Get-Command -ParameterType ServiceController

Následující příkazy přijímají objekt ServiceController prostřednictvím vstupu kanálu nebo parametru.

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

Poznámka:

Jak je uvedeno v požadavcích kapitoly, ujistěte se, že máte pro tuto část nainstalovaný nástroj RSAT. Počítač testovacího prostředí musí být navíc členem domény Active Directory vašeho testovacího prostředí.

Chcete-li identifikovat příkazy přidané do modulu ActiveDirectory PowerShell po instalaci Get-Command, použijte Get-Command v kombinaci s parametrem Module. Následující příklad obsahuje seznam všech příkazů dostupných v modulu ActiveDirectory .

Get-Command -Module ActiveDirectory

Modul ActiveDirectory PowerShell přidal celkem 147 příkazů.

Všimli jste si konvence pojmenování těchto příkazů? Podstatná jména v názvech příkazů mají předponu AD , aby nedocházelo k potenciálním konfliktům názvů s příkazy v jiných modulech. Tento použití předpon je běžným postupem mezi moduly PowerShellu.

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

Podle výchozího nastavení cmdlet Get-ADUser načítá omezenou sadu vlastností u uživatelských objektů a omezuje výstup na prvních 1 000 uživatelů. Toto omezení je optimalizace výkonu navržená tak, aby se zabránilo zahlcení služby Active Directory nadměrným načítáním dat.

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

I když máte základní znalosti o službě Active Directory, můžete si uvědomit, že uživatelský účet má více vlastností než ty, které jsou uvedené v příkladu.

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

Rutina Get-ADUser obsahuje parametr Properties , který určuje další vlastnosti nad rámec výchozích hodnot, které chcete načíst. Chcete-li vrátit všechny vlastnosti, použijte * zástupný znak jako hodnotu parametru.

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

Výchozí konfigurace pro načítání vlastností uživatelského účtu služby Active Directory je záměrně omezená, aby nedocházelo k problémům s výkonem. Pokus o vrácení všech vlastností pro každý uživatelský účet v produkčním prostředí služby Active Directory může výrazně snížit výkon řadičů domény a sítě. Obvykle potřebujete jenom konkrétní vlastnosti pro určité uživatele. Vrácení všech vlastností pro jednoho uživatele je však přiměřené při identifikaci dostupných vlastností.

Při vytváření prototypů není neobvyklé spustit příkaz několikrát. Pokud očekáváte spuštění dotazu náročného na prostředky při vytváření prototypů příkazu, zvažte jeho provedení jednou a uložení výsledků do proměnné. Pak můžete pracovat s obsahem proměnné efektivněji než opakovaně s dotazem náročným na prostředky.

Například následující příkaz načte všechny vlastnosti uživatelského účtu a uloží výsledky do proměnné s názvem $Users. Pracujte s obsahem $Users proměnné namísto vícenásobného Get-ADUser spuštění příkazu. Mějte na paměti, že obsah proměnné se neaktualizuje automaticky, když se informace uživatele změní ve službě Active Directory.

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

Dostupné vlastnosti můžete prozkoumat přesměrováním proměnné $Users do Get-Member.

$Users | Get-Member -MemberType Properties

Chcete-li zobrazit konkrétní vlastnosti, jako Název, LastLogonDate a LastBadPasswordAttempt, předejte proměnnou $Users do Select-Object. Tato metoda zobrazí požadované vlastnosti a jejich hodnoty na základě obsahu $Users proměnné a eliminuje potřebu více dotazů do služby Active Directory. Jedná se o efektivnější přístup než opakované spuštění Get-ADUser příkazu.

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

Při dotazování služby Active Directory vyfiltrujte data ve zdroji pomocí parametru Vlastnosti , aby Get-ADUser se vrátily pouze nezbytné vlastnosti.

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

Shrnutí

V této kapitole jste se dozvěděli, jak určit, jaký typ objektu příkaz vytvoří, jaké vlastnosti a metody jsou k dispozici pro příkazy a jak pracovat s příkazy, které omezují vlastnosti vrácené ve výchozím nastavení.

Přehled

  1. Jaký typ objektu rutina Get-Process vytvoří?
  2. Jak zjistíte, jaké jsou dostupné vlastnosti pro příkaz?
  3. Co byste měli zkontrolovat, zda existuje příkaz k získání něčeho, ale ne k nastavení stejného?
  4. Jak lze některé příkazy, které standardně nevrací žádný výstup, přimět, aby generovaly výstup?
  5. Co byste měli zvážit při vytváření prototypů příkazu, který vytváří velký objem výstupu?

Reference

Další kroky

V další kapitole se seznámíte s krátkými výrazy a potrubím.