Partager via


Chapitre 3 - Découverte des objets, propriétés et méthodes

PowerShell est un langage de script orienté objet. Il représente les données et les états système à l’aide d’objets structurés dérivés de classes .NET définies dans le .NET Framework. En tirant parti du .NET Framework, PowerShell offre un accès à différentes fonctionnalités système, notamment le système de fichiers, le Registre et les classes WMI (Windows Management Instrumentation). PowerShell a également accès à la bibliothèque de classes .NET Framework, qui contient une vaste collection de classes que vous pouvez utiliser pour développer des scripts PowerShell robustes.

Dans PowerShell, chaque élément ou état est une instance d’un objet qui peut être exploré et manipulé. L’applet Get-Member de commande est l’un des outils principaux fournis par PowerShell pour la découverte d’objets, qui révèle les caractéristiques d’un objet. Ce chapitre explique comment PowerShell tire parti des objets et comment vous pouvez découvrir et manipuler ces objets pour simplifier vos scripts et gérer vos systèmes plus efficacement.

Prérequis

Pour suivre les exemples spécifiques de ce chapitre, assurez-vous que votre ordinateur d’environnement lab fait partie de votre domaine Active Directory de votre environnement lab. Vous devez également installer le module PowerShell Active Directory fourni avec les outils d’administration de serveur distant Windows (RSAT). Si vous utilisez Windows 10 build 1809 ou version ultérieure, y compris Windows 11, vous pouvez installer RSAT en tant que fonctionnalité Windows.

Remarque

Active Directory n’est pas pris en charge pour les éditions Windows Home.

  • Pour plus d’informations sur l’installation de RSAT, consultez les modules de gestion Windows.
  • Pour les versions antérieures de Windows, consultez RSAT pour Windows.

Get-Member

Get-Member fournit des insights sur les objets, les propriétés et les méthodes associés aux commandes PowerShell. Vous pouvez diriger n’importe quelle commande PowerShell qui produit une sortie basée sur des objets vers Get-Member. Lorsque vous dirigez la sortie d’une commande Get-Membervers , elle révèle la structure de l’objet retourné par la commande, en détaillant ses propriétés et méthodes.

  • Propriétés : attributs d’un objet.
  • Méthodes : actions que vous pouvez effectuer sur un objet.

Pour illustrer ce concept, considérez le permis de conduire comme une analogie. Comme n’importe quel objet, la licence d’un pilote a des propriétés, telles que la couleur des yeux, qui inclut et blue des brown valeurs généralement. En revanche, les méthodes représentent des actions que vous pouvez effectuer sur l’objet. Par exemple, Revoke est une méthode que le ministère des véhicules automobiles peut effectuer sur le permis de conduire.

Propriétés

Pour récupérer des détails sur le service de temps Windows sur votre système à l’aide de PowerShell, utilisez l’applet de Get-Service commande.

Get-Service -Name w32time

Les résultats incluent les propriétés Status, Name et DisplayName . La propriété Status indique que le service est Running. La valeur de la propriété Name est w32time, et la valeur de la propriété DisplayName est Windows Time.

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

Pour répertorier toutes les propriétés et méthodes disponibles pour Get-Service, dirigez-le vers Get-Member.

Get-Service -Name w32time | Get-Member

Les résultats montrent que la première ligne contient une information significative. TypeName identifie le type d’objet retourné, qui dans cet exemple est un objet System.ServiceProcess.ServiceController . Ce nom est souvent abrégé en dernière partie du TypeName, tel que ServiceController, dans cet exemple.

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

Notez que lorsque vous êtes redirigé Get-Service vers Get-Member, il existe plus de propriétés que celles affichées par défaut. Bien que ces propriétés supplémentaires ne soient pas affichées par défaut, vous pouvez les sélectionner en les pipant et en Select-Object utilisant le paramètre Property . L’exemple suivant sélectionne toutes les propriétés en pipant les résultats du Get-ServiceSelect-Object caractère générique et en spécifiant le * caractère générique comme valeur pour le paramètre Property.

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

Par défaut, PowerShell retourne quatre propriétés sous forme de table et cinq ou plus sous forme de liste. Toutefois, certaines commandes appliquent une mise en forme personnalisée pour remplacer le nombre par défaut de propriétés affichées dans un tableau. Vous pouvez utiliser Format-Table et Format-List remplacer ces valeurs par défaut manuellement.

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           :

Des propriétés spécifiques peuvent également être sélectionnées à l’aide d’une liste séparée par des virgules comme valeur du paramètre Property .

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

Vous pouvez utiliser des caractères génériques lors de la spécification de noms de propriétés avec Select-Object.

Dans l’exemple suivant, utilisez Can* l’une des valeurs du paramètre Property pour renvoyer toutes les propriétés qui commencent par Can. Il s’agissait notamment de CanPauseAndContinue, CanShutdownet CanStop.

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

Notez qu’il existe plus de propriétés répertoriées que celles affichées par défaut.

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

Méthodes

Les méthodes sont des actions que vous pouvez effectuer sur un objet. Utilisez le paramètre MemberType pour affiner les résultats de l’affichage Get-Member uniquement des méthodes pour Get-Service.

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

Comme vous pouvez le voir, il existe plusieurs méthodes.

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

Vous pouvez utiliser la méthode Stop pour arrêter un service Windows. Vous devez exécuter cette commande à partir d’une session PowerShell avec élévation de privilèges.

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

Interrogez l’état du service de temps Windows pour confirmer qu’il est arrêté.

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

Vous pouvez utiliser des méthodes avec parcimonie, mais vous devriez les connaître. Parfois, vous trouvez Get-* des commandes sans commande correspondante Set-* . Souvent, vous pouvez trouver une méthode pour effectuer une Set-* action dans ce scénario. L’applet Get-SqlAgentJob de commande dans le module SqlServer PowerShell est un excellent exemple. Aucune applet de commande correspondante Set-* n’existe, mais vous pouvez utiliser une méthode pour effectuer la même tâche. Pour plus d’informations sur le module SqlServer PowerShell et les instructions d’installation, consultez la vue d’ensemble de SQL Server PowerShell.

Une autre raison de connaître les méthodes est que certains utilisateurs PowerShell supposent que vous ne pouvez pas apporter de modifications destructrices avec Get-* des commandes, mais qu’ils peuvent réellement causer des problèmes graves si l’utilisation incorrecte est utilisée.

Une meilleure option consiste à utiliser une applet de commande dédiée si elle existe pour effectuer une action. Par exemple, utilisez l’applet Start-Service de commande pour démarrer le service de temps Windows.

Par défaut, Start-Servicecomme la méthode Start de Get-Service, ne retourne aucun résultat. Toutefois, l’un des avantages de l’utilisation d’une applet de commande est qu’il fournit souvent des fonctionnalités supplémentaires qui ne sont pas disponibles avec une méthode.

Dans l’exemple suivant, utilisez le paramètre PassThru , ce qui provoque une applet de commande qui ne produit généralement pas de sortie pour générer la sortie.

Étant donné que PowerShell ne participe pas au contrôle d’accès utilisateur (UAC), vous devez exécuter des commandes qui nécessitent une élévation, par Start-Serviceexemple, à partir d’une session PowerShell avec élévation de privilèges.

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

Remarque

Lorsque vous utilisez des applets de commande PowerShell, il est important d’éviter de faire des hypothèses sur leur sortie.

Pour récupérer des informations sur le processus PowerShell en cours d’exécution sur votre ordinateur d’environnement lab, utilisez l’applet de Get-Process commande.

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

Pour déterminer les propriétés disponibles, dirigez Get-Process vers Get-Member.

Get-Process -Name powershell | Get-Member

Lorsque vous utilisez la Get-Process commande, vous remarquerez peut-être que certaines propriétés affichées par défaut sont manquantes lorsque vous affichez les résultats de Get-Member. Ce comportement est dû à plusieurs des valeurs affichées par défaut, telles que NPM(K), , PM(K)WS(K), et , et CPU(s), sont des propriétés calculées. Vous devez diriger les commandes pour Get-Member déterminer leurs noms de propriétés réels.

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

Vous ne pouvez pas diriger une commande vers Get-Member ce qui ne génère pas de sortie. Étant donné que Start-Service ne produit pas de sortie par défaut, la tentative de canaliser celui-ci Get-Member entraîne une erreur.

Start-Service -Name w32time | Get-Member

Remarque

Pour être redirigée vers Get-Member, une commande doit produire une sortie basée sur un objet.

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

Pour éviter cette erreur, spécifiez le paramètre PassThru avec Start-Service. Comme mentionné précédemment, l’ajout du paramètre PassThru provoque une applet de commande qui ne produit généralement pas de sortie pour générer la sortie.

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 est conçu pour afficher la sortie directement dans l’hôte PowerShell et ne produit pas de sortie basée sur des objets. Par conséquent, vous ne pouvez pas diriger sa sortie vers Get-Member, ce qui nécessite une entrée basée sur l’objet.

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

Le fait de connaître le type d’objet qu’une commande produit vous permet de rechercher des commandes qui acceptent ce type d’objet comme entrée.

Get-Command -ParameterType ServiceController

Les commandes suivantes acceptent un objet ServiceController via une entrée de pipeline ou de paramètre.

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

Remarque

Comme indiqué dans les conditions préalables au chapitre, vérifiez que vous avez installé RSAT pour cette section. En outre, votre ordinateur d’environnement lab doit être membre du domaine Active Directory de votre environnement lab.

Pour identifier les commandes ajoutées au module PowerShell ActiveDirectory après avoir installé RSAT, utilisez Get-Command combinées avec le paramètre Module . L’exemple suivant répertorie toutes les commandes disponibles dans le module ActiveDirectory .

Get-Command -Module ActiveDirectory

Le module ActiveDirectory PowerShell a ajouté un total de 147 commandes.

Avez-vous observé la convention d’affectation de noms de ces commandes ? Les noms des noms des commandes sont préfixés avec AD pour éviter les conflits potentiels de noms avec les commandes d’autres modules. Ce préfixe est une pratique courante parmi les modules 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
...

Par défaut, l’applet Get-ADUser de commande récupère un ensemble limité de propriétés pour les objets utilisateur et limite sa sortie aux 1 000 premiers utilisateurs. Cette contrainte est une optimisation des performances conçue pour éviter de surcharger Active Directory avec une récupération excessive des données.

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

Même si vous avez seulement une compréhension de base d’Active Directory, vous pouvez reconnaître qu’un compte d’utilisateur a plus de propriétés que celles indiquées dans l’exemple.

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

L’applet Get-ADUser de commande inclut un paramètre Properties pour spécifier des propriétés supplémentaires au-delà des valeurs par défaut que vous souhaitez récupérer. Pour retourner toutes les propriétés, utilisez le * caractère générique comme valeur de paramètre.

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

La configuration par défaut pour la récupération des propriétés du compte d’utilisateur Active Directory est intentionnellement limitée pour éviter les problèmes de performances. La tentative de retourner chaque propriété pour chaque compte d’utilisateur dans votre environnement Active Directory de production peut dégrader gravement les performances de vos contrôleurs de domaine et de votre réseau. En règle générale, vous avez uniquement besoin de propriétés spécifiques pour certains utilisateurs. Toutefois, le renvoi de toutes les propriétés d’un seul utilisateur est raisonnable lors de l’identification des propriétés disponibles.

Il n’est pas rare d’exécuter une commande plusieurs fois lors du prototypage. Si vous prévoyez d’exécuter une requête gourmande en ressources lors du prototypage d’une commande, envisagez de l’exécuter une fois et de stocker les résultats dans une variable. Ensuite, vous pouvez utiliser le contenu de la variable plus efficacement que l’exécution répétée d’une requête gourmande en ressources.

Par exemple, la commande suivante récupère toutes les propriétés d’un compte d’utilisateur et stocke les résultats dans une variable nommée $Users. Utilisez le contenu de la $Users variable au lieu d’exécuter la Get-ADUser commande plusieurs fois. N’oubliez pas que le contenu de la variable ne se met pas à jour automatiquement quand les informations d’un utilisateur changent dans Active Directory.

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

Vous pouvez explorer les propriétés disponibles en pipant la $Users variable vers Get-Member.

$Users | Get-Member -MemberType Properties

Pour afficher des propriétés spécifiques telles que Name, LastLogonDate Cette méthode affiche les propriétés souhaitées et leurs valeurs en fonction du contenu de la $Users variable, éliminant ainsi la nécessité de plusieurs requêtes vers Active Directory. Il s’agit d’une approche plus efficace en matière de ressources que l’exécution répétée de la Get-ADUser commande.

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

Lorsque vous interrogez Active Directory, filtrez les données à la source à l’aide du paramètre Propriétés pour Get-ADUser renvoyer uniquement les propriétés nécessaires.

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

Résumé

Dans ce chapitre, vous avez appris à déterminer le type d’objet qu’une commande produit, quelles propriétés et méthodes sont disponibles pour une commande et comment utiliser des commandes qui limitent les propriétés retournées par défaut.

Révision

  1. Quel type d’objet est généré par l’applet de commande Get-Process ?
  2. Comment connaître les propriétés qui sont disponibles pour une commande ?
  3. Que devez-vous vérifier si une commande existe pour obtenir quelque chose, mais pas pour définir la même chose ?
  4. Comment certaines commandes qui ne retournent pas de sortie par défaut doivent-elles être générées pour générer la sortie ?
  5. Que devez-vous envisager de faire lors du prototypage d’une commande qui produit une grande quantité de sortie ?

Références

Étapes suivantes

Dans le chapitre suivant, vous allez découvrir les lignes un et le pipeline.