Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
- Para obter informações sobre como instalar o RSAT, consulte Módulos de gerenciamento do Windows.
- Para as versões mais antigas do Windows, confira Ferramentas de Administração de Servidor Remoto para Windows.
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-Service
o , 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
- Que tipo de objeto o cmdlet
Get-Process
produz? - Como determinar quais são as propriedades disponíveis para um comando?
- O que você deve verificar se existe um comando para obter algo, mas não para definir a mesma coisa?
- Como alguns comandos que não retornam saída por padrão podem ser feitos para gerar saída?
- O que você deve considerar fazer ao prototipar um comando que produz uma grande quantidade de saída?
Referências
- Get-Member
- Exibindo a estrutura do objeto (Get-Member)
- about_Objects
- about_Properties
- sobre_Métodos
- Não conhece um cmdlet do PowerShell para iniciar ou interromper algo? Não se esqueça de verificar se há métodos nos cmdlets get
Próximas etapas
No próximo capítulo, você aprenderá sobre frases de efeito e o pipeline.