Compartilhar via


Capítulo 3 – Como descobrir objetos, propriedades e métodos

O PowerShell é uma linguagem de script orientada a objetos. Ele representa dados e estados do sistema usando objetos estruturados derivados de classes .NET definidas no .NET Framework. Ao aproveitar o .NET Framework, o PowerShell oferece acesso a vários recursos do sistema, incluindo sistema de arquivos, registro e classes WMI (Instrumentação de Gerenciamento do Windows). O PowerShell também tem acesso à biblioteca de classes do .NET Framework, que contém uma vasta coleção de classes que você pode usar para desenvolver scripts robustos do PowerShell.

No PowerShell, cada item ou estado é uma instância de um objeto que pode ser explorado e manipulado. O Get-Member cmdlet é uma das principais ferramentas fornecidas pelo PowerShell para descoberta de objetos, que revela as características de um objeto. Este capítulo explora como o PowerShell aproveita objetos e como você pode descobrir e manipular esses objetos para simplificar seus scripts e gerenciar seus sistemas com mais eficiência.

Pré-requisitos

Para seguir os exemplos específicos neste capítulo, verifique se o computador do ambiente de laboratório faz parte do domínio do Active Directory do ambiente de laboratório. Você também deve instalar o módulo do PowerShell do Active Directory fornecido com as Ferramentas de Administração de Servidor Remoto (RSAT) do Windows. Se você estiver usando o Windows 10 build 1809 ou posterior, incluindo o Windows 11, poderá instalar o RSAT como um recurso do Windows.

Observação

O Active Directory não é compatível com as edições Windows Home.

Get-Member

Get-Member fornece informações sobre os objetos, propriedades e métodos associados aos comandos do PowerShell. Você pode canalizar qualquer comando do PowerShell que produza saída baseada em objeto para Get-Member. Quando você canaliza a saída de um comando para Get-Member, ela revela a estrutura do objeto retornado pelo comando, detalhando suas propriedades e métodos.

  • Propriedades: os atributos de um objeto.
  • Métodos: As ações que você pode executar em um objeto.

Para ilustrar esse conceito, considere a carteira de motorista como uma analogia. Como qualquer objeto, uma carteira de motorista tem propriedades, como a cor dos olhos, que normalmente inclui blue e brown valores. Por outro lado, os métodos representam ações que você pode executar no objeto. Por exemplo, Revogar é um método que o Departamento de Veículos Motorizados pode executar em uma carteira de motorista.

Propriedades

Para recuperar detalhes sobre o serviço de Tempo do Windows em seu sistema usando o PowerShell, use o Get-Service cmdlet.

Get-Service -Name w32time

Os resultados incluem as propriedades Status, Name e DisplayName . A propriedade Status indica que o serviço é Running. O valor da propriedade Name é w32time, e o valor da propriedade DisplayName é Windows Time.

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

Para listar todas as propriedades e métodos disponíveis para Get-Serviceo , canalize-o para Get-Member.

Get-Service -Name w32time | Get-Member

Os resultados mostram que a primeira linha contém uma informação significativa. TypeName identifica o tipo de objeto retornado, que neste exemplo é um objeto System.ServiceProcess.ServiceController . Esse nome geralmente é abreviado para a última parte do TypeName, como ServiceController, neste exemplo.

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

Observe que quando você canalizou Get-Service para Get-Member, há mais propriedades do que as exibidas por padrão. Embora essas propriedades adicionais não sejam mostradas por padrão, você pode selecioná-las canalizando Select-Object e usando o parâmetro Property . O exemplo a seguir seleciona todas as propriedades canalizando os resultados de Get-Service para Select-Object e especificando o caractere curinga * como o valor do parâmetro Property .

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

Por padrão, o PowerShell retorna quatro propriedades como uma tabela e cinco ou mais como uma lista. No entanto, alguns comandos aplicam formatação personalizada para substituir o número padrão de propriedades exibidas em uma tabela. Você pode usar Format-Table e Format-List substituir esses padrões manualmente.

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           :

Propriedades específicas também podem ser selecionadas usando uma lista separada por vírgulas como o valor do parâmetro Property .

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

Você pode usar caracteres curinga ao especificar nomes de propriedade com Select-Object.

No exemplo a seguir, use Can* como um dos valores do parâmetro Property para retornar todas as propriedades que começam com Can. Isso inclui CanPauseAndContinue, CanShutdown e CanStop.

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

Observe que há mais propriedades listadas do que são exibidas por padrão.

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

Métodos

Métodos são ações que você pode executar em um objeto. Use o parâmetro MemberType para restringir os resultados de Get-Member para exibir apenas os métodos para Get-Service.

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

Como você pode ver, existem vários métodos.

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

Você pode usar o método Stop para interromper um serviço do Windows. Você deve executar esse comando em uma sessão do PowerShell com privilégios elevados.

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

Consulte o status do serviço de Tempo do Windows para confirmar se ele foi interrompido.

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

Você pode usar métodos com moderação, mas deve estar ciente deles. Às vezes, você encontra Get-* comandos sem um comando correspondente Set-* . Muitas vezes, você pode encontrar um método para executar uma Set-* ação nesse cenário. O Get-SqlAgentJob cmdlet no módulo SqlServer PowerShell é um excelente exemplo. Não existe nenhum cmdlet correspondente Set-* , mas você pode usar um método para concluir a mesma tarefa. Para obter mais informações sobre o módulo SqlServer PowerShell e as instruções de instalação, consulte a visão geral do SQL Server PowerShell.

Outro motivo para estar ciente dos métodos é que alguns usuários do PowerShell assumem que você não pode fazer alterações destrutivas com Get-* comandos, mas eles podem realmente causar problemas graves se mal utilizados.

Uma opção melhor é usar um cmdlet dedicado, se houver um, para executar uma ação. Por exemplo, use o Start-Service cmdlet para iniciar o serviço de Tempo do Windows.

Por padrão, Start-Service, como o método Start de Get-Service, não retorna nenhum resultado. No entanto, um dos benefícios de usar um cmdlet é que ele geralmente fornece recursos adicionais que não estão disponíveis com um método.

No exemplo a seguir, use o parâmetro PassThru , que faz com que um cmdlet que normalmente não produz saída gere saída.

Como o PowerShell não participa do UAC (Controle de Acesso do Usuário), você deve executar comandos que exigem elevação, como Start-Service, de uma sessão elevada do PowerShell.

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

Observação

Ao trabalhar com cmdlets do PowerShell, é importante evitar fazer suposições sobre sua saída.

Para recuperar informações sobre o processo do PowerShell em execução no computador do ambiente de laboratório, use o Get-Process cmdlet.

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

Para determinar as propriedades disponíveis, canalize Get-Process para Get-Member.

Get-Process -Name powershell | Get-Member

Ao usar o Get-Process comando, você pode notar que algumas propriedades exibidas por padrão estão ausentes quando você exibe os resultados do Get-Member. Esse comportamento ocorre porque vários dos valores mostrados por padrão, como NPM(K), PM(K), WS(K)e CPU(s), são propriedades calculadas. Você deve canalizar comandos para Get-Member determinar seus nomes de propriedade reais.

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

Você não pode canalizar um comando para Get-Member que não gere saída. Como Start-Service não produz saída por padrão, tentar canalizá-la resulta Get-Member em um erro.

Start-Service -Name w32time | Get-Member

Observação

A fim de ser direcionado para Get-Member, um comando precisa produzir uma saída baseada em objeto.

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

Para evitar esse erro, especifique o parâmetro PassThru com Start-Service. Conforme mencionado anteriormente, adicionar o parâmetro PassThru faz com que um cmdlet que geralmente não produz saída gere saída.

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 foi projetado para mostrar a saída diretamente no host do PowerShell e não produz saída baseada em objeto. Como resultado, você não pode canalizar sua saída para Get-Member, o que requer entrada baseada em objeto.

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

Saber o tipo de objeto que um comando produz permite que você pesquise comandos que aceitem esse tipo de objeto como entrada.

Get-Command -ParameterType ServiceController

Os comandos a seguir aceitam um objeto ServiceController por meio de pipeline ou entrada de parâmetro.

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

Observação

Conforme mencionado nos pré-requisitos do capítulo, certifique-se de ter o RSAT instalado para esta seção. Além disso, o computador do ambiente de laboratório deve ser membro do domínio do Active Directory do ambiente de laboratório.

Para identificar os comandos adicionados ao módulo do PowerShell do ActiveDirectory após a instalação do RSAT, use Get-Command combinado com o parâmetro Module . O exemplo a seguir lista todos os comandos disponíveis no módulo ActiveDirectory .

Get-Command -Module ActiveDirectory

O módulo ActiveDirectory PowerShell adicionou um total de 147 comandos.

Você observou a convenção de nomenclatura desses comandos? Os substantivos nos nomes dos comandos são prefixados com AD para evitar possíveis conflitos de nomenclatura com comandos em outros módulos. Essa prefixação é uma prática comum entre os módulos do PowerShell.

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

Por padrão, o Get-ADUser cmdlet recupera um conjunto limitado de propriedades para objetos de usuário e limita sua saída aos primeiros 1.000 usuários. Essa restrição é uma otimização de desempenho projetada para evitar sobrecarregar o Active Directory com recuperação excessiva de dados.

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

Mesmo que você tenha apenas uma compreensão básica do Active Directory, talvez reconheça que uma conta de usuário tem mais propriedades do que as mostradas no exemplo.

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

O Get-ADUser cmdlet inclui um parâmetro Properties para especificar propriedades adicionais além dos padrões que você deseja recuperar. Para retornar todas as propriedades, use o caractere curinga * como o valor do parâmetro.

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

A configuração padrão para recuperar propriedades da conta de usuário do Active Directory é intencionalmente limitada para evitar problemas de desempenho. Tentar retornar todas as propriedades de cada conta de usuário em seu ambiente de produção do Active Directory pode degradar gravemente o desempenho de seus controladores de domínio e rede. Normalmente, você só precisa de propriedades específicas para determinados usuários. No entanto, retornar todas as propriedades para um único usuário é razoável ao identificar as propriedades disponíveis.

Não é incomum executar um comando várias vezes ao prototipá-lo. Se você antecipar a execução de uma consulta com uso intensivo de recursos ao prototipar um comando, considere executá-la uma vez e armazenar os resultados em uma variável. Em seguida, você pode trabalhar com o conteúdo da variável de forma mais eficiente do que executar repetidamente uma consulta com uso intensivo de recursos.

Por exemplo, o comando a seguir recupera todas as propriedades de uma conta de usuário e armazena os resultados em uma variável chamada $Users. Trabalhe com o conteúdo da $Users variável em vez de executar o Get-ADUser comando várias vezes. Lembre-se de que o conteúdo da variável não é atualizado automaticamente quando as informações de um usuário são alteradas no Active Directory.

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

Você pode explorar as propriedades disponíveis canalizando a $Users variável para Get-Member.

$Users | Get-Member -MemberType Properties

Para exibir propriedades específicas, como Name, LastLogonDate Esse método exibe as propriedades desejadas e seus valores com base no conteúdo da variável, eliminando a necessidade de $Users várias consultas ao Active Directory. É uma abordagem mais eficiente em termos de recursos do que executar repetidamente o Get-ADUser comando.

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

Ao consultar o Active Directory, filtre os dados na origem usando o parâmetro Properties de Get-ADUser para retornar apenas as propriedades necessárias.

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

Resumo

Neste capítulo, você aprendeu como determinar que tipo de objeto um comando produz, quais propriedades e métodos estão disponíveis para um comando e como trabalhar com comandos que limitam as propriedades retornadas por padrão.

Revisão

  1. Que tipo de objeto o cmdlet Get-Process produz?
  2. Como determinar quais são as propriedades disponíveis para um comando?
  3. O que você deve verificar se existe um comando para obter algo, mas não para definir a mesma coisa?
  4. Como alguns comandos que não retornam saída por padrão podem ser feitos para gerar saída?
  5. O que você deve considerar fazer ao prototipar um comando que produz uma grande quantidade de saída?

Referências

Próximas etapas

No próximo capítulo, você aprenderá sobre frases de efeito e o pipeline.