次の方法で共有


第 3 章 - オブジェクト、プロパティ、およびメソッドの検出

PowerShell は、オブジェクト指向のスクリプト言語です。 これは、.NET Framework で定義されている .NET クラスから派生した構造化オブジェクトを使用して、データとシステムの状態を表します。 PowerShell では、.NET Framework を利用して、ファイル システム、レジストリ、Windows Management Instrumentation (WMI) クラスなど、さまざまなシステム機能にアクセスできます。 PowerShell には、堅牢な PowerShell スクリプトの開発に使用できるクラスの膨大なコレクションが含まれている .NET Framework クラス ライブラリにもアクセスできます。

PowerShell では、各項目または状態は、探索および操作できるオブジェクトのインスタンスです。 Get-Member コマンドレットは、オブジェクト検出用に PowerShell によって提供される主要なツールの 1 つであり、オブジェクトの特性が明らかになります。 この章では、PowerShell でオブジェクトを活用する方法と、これらのオブジェクトを検出して操作してスクリプトを効率化し、システムをより効率的に管理する方法について説明します。

前提条件

この章の具体的な例に従うには、ラボ環境コンピューターがラボ環境 Active Directory ドメインの一部であることを確認します。 また、Windows リモート サーバー管理ツール (RSAT) にバンドルされている Active Directory PowerShell モジュールもインストールする必要があります。 Windows 10 ビルド 1809 以降 (Windows 11 を含む) を使用している場合は、Windows 機能として RSAT をインストールできます。

Active Directory は、Windows Home エディションではサポートされていません。

  • RSAT ツールのインストールについては、「Windows 管理モジュール」を参照してください。
  • Windows の以前のバージョンについては、Windows 用 RSAT に関するページを参照してください。

Get-Member

Get-Member は、PowerShell コマンドに関連付けられているオブジェクト、プロパティ、メソッドに関する分析情報を提供します。 オブジェクトベースの出力を生成するすべてのコマンドを、Get-Member にパイプ処理することができます。 コマンドの出力をパイプ処理して Get-Member すると、コマンドによって返されるオブジェクトの構造が表示され、そのプロパティとメソッドが詳細に表示されます。

  • プロパティ: オブジェクトの属性。
  • メソッド: オブジェクトに対して実行できるアクション。

この概念を説明するために、運転免許証を類推と考えてください。 他のオブジェクトと同様に、ドライバーのライセンスには、通常、blue の値を含むbrownなどのプロパティがあります。 これに対し、メソッドはオブジェクトに対して実行できるアクションを表します。 たとえば、 Revoke は、自動車省が運転免許証で実行できる方法です。

プロパティ

PowerShell を使用してシステム上の Windows タイム サービスに関する詳細を取得するには、 Get-Service コマンドレットを使用します。

Get-Service -Name w32time

結果には、 StatusName、および DisplayName プロパティが含まれます。 Status プロパティは、サービスが Running されていることを示します。 Name プロパティの値は w32timeDisplayName プロパティの値は 、DisplayName の値は Windows Time です。

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

Get-Service について使用可能なすべてのメソッドとプロパティの一覧については、Get-Member をパイプ処理してください。

Get-Service -Name w32time | Get-Member

結果は、最初の行に重要な情報が 1 つ含まれていることを示しています。 TypeName は、返されるオブジェクトの型を識別します。この例では、 System.ServiceProcess.ServiceController オブジェクトです。 この名前は、 TypeName の最後の部分に省略されることがよくあります (この例では ServiceController など)。

   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
RequiredServices          AliasProperty RequiredServices = ServicesDepend...
Disposed                  Event         System.EventHandler Disposed(Syst...
Close                     Method        void Close()
Continue                  Method        void Continue()
CreateObjRef              Method        System.Runtime.Remoting.ObjRef Cr...
Dispose                   Method        void Dispose(), void IDisposable....
Equals                    Method        bool Equals(System.Object obj)
ExecuteCommand            Method        void ExecuteCommand(int command)
GetHashCode               Method        int GetHashCode()
GetLifetimeService        Method        System.Object GetLifetimeService()
GetType                   Method        type GetType()
InitializeLifetimeService Method        System.Object InitializeLifetimeS...
Pause                     Method        void Pause()
Refresh                   Method        void Refresh()
Start                     Method        void Start(), void Start(string[]...
Stop                      Method        void Stop()
WaitForStatus             Method        void WaitForStatus(System.Service...
CanPauseAndContinue       Property      bool CanPauseAndContinue {get;}
CanShutdown               Property      bool CanShutdown {get;}
CanStop                   Property      bool CanStop {get;}
Container                 Property      System.ComponentModel.IContainer ...
DependentServices         Property      System.ServiceProcess.ServiceCont...
DisplayName               Property      string DisplayName {get;set;}
MachineName               Property      string MachineName {get;set;}
ServiceHandle             Property      System.Runtime.InteropServices.Sa...
ServiceName               Property      string ServiceName {get;set;}
ServicesDependedOn        Property      System.ServiceProcess.ServiceCont...
ServiceType               Property      System.ServiceProcess.ServiceType...
Site                      Property      System.ComponentModel.ISite Site ...
StartType                 Property      System.ServiceProcess.ServiceStar...
Status                    Property      System.ServiceProcess.ServiceCont...
ToString                  ScriptMethod  System.Object ToString();

Get-Service から Get-Member にパイプ処理するとき、既定で表示されるよりも多くのプロパティがあることに注意してください。 これらの追加のプロパティは既定では表示されませんが、Select-Object にパイプ処理し、Property パラメータを使用することにより選択できます。 次の例では、Get-Service の結果を Select-Object にパイプ処理し、* パラメーターの値として ワイルドカード文字を指定することにより、すべてのプロパティを選択します。

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

既定では、PowerShell は 4 つのプロパティをテーブルとして、5 つ以上をリストとして返します。 ただし、一部のコマンドでは、カスタム書式設定を使用して、テーブルに既定で表示されるプロパティの数を上書きできます。 Format-TableFormat-List を使用して、これらの既定値を手動で上書きできます。

Name                : w32time
RequiredServices    : {}
CanPauseAndContinue : False
CanShutdown         : True
CanStop             : True
DisplayName         : Windows Time
DependentServices   : {}
MachineName         : .
ServiceName         : w32time
ServicesDependedOn  : {}
ServiceHandle       :
Status              : Running
ServiceType         : Win32OwnProcess, Win32ShareProcess
StartType           : Manual
Site                :
Container           :

特定のプロパティは、Property パラメーターの値のコンマ区切りリストを使用して選択することもできます。

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

ワイルドカード文字は、Select-Object でプロパティ名を指定するときに使用することができます。

前の例では、Can*Property パラメーターの値の 1 つとして使用され、Can で始まるすべてのプロパティが返されます。 これらには、CanPauseAndContinueCanShutdown、および CanStop が含まれます。

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

既定で表示されるよりも多くのプロパティがあることに注意してください。

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

メソッド

メソッドは、オブジェクトに対して実行できるアクションです。 のメソッドのみを表示するには、Get-Member パラメーターを使用して Get-Service の結果を絞り込みます。

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

ご覧のとおり、多くのメソッドがあります。

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

Stop メソッドを使用すると、Windows サービスを停止できます。 このコマンドは、管理者特権の PowerShell セッションから実行しなければなりません。

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

Windows タイム サービスの状態を照会して、停止されていることを確認します。

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

メソッドは慎重に使用する可能性がありますが、注意する必要があります。 場合によっては、対応する Get-* コマンドなしで Set-* コマンドが見つかる場合があります。 多くの場合、このシナリオでは Set-* アクションを実行する方法を見つけることができます。 Get-SqlAgentJob PowerShell モジュールの コマンドレットは、この良い例です。 対応する Set-* コマンドレットはありませんが、メソッドを使用して同じタスクを完了できます。 SqlServer PowerShell モジュールおよびインストールする方法については、SQL Server PowerShell 概要 を参照してください。

メソッドを認識するもう 1 つの理由は、一部の PowerShell ユーザーは、 Get-* コマンドを使用して破壊的な変更を行うことはできませんが、誤用された場合に実際には重大な問題を引き起こす可能性があることを前提としています。

より良いオプションは、専用のコマンドレットがある場合はそれを使用してアクションを実行することです。 たとえば、 Start-Service コマンドレットを使用して Windows タイム サービスを開始します。

既定では、Start-Service は、Get-Serviceメソッドと同じように結果を返しません。 ただし、コマンドレットを使用する利点の 1 つは、多くの場合、メソッドでは使用できない追加の機能を提供することです。

次の例では、 PassThru パラメーターを使用します。これにより、通常は出力を生成しないコマンドレットが出力を生成します。

PowerShell はユーザー アクセス制御 (UAC) に参加しないため、昇格された PowerShell セッションから昇格 ( Start-Service など) を必要とするコマンドを実行する必要があります。

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

PowerShell コマンドレットを使用する場合は、出力に関する想定を避ける必要があります。

ラボ環境コンピューターで実行されている PowerShell プロセスに関する情報を取得するには、Get-Process コマンドレットを使用します。

Get-Process -Name powershell
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    710      31    55692      70580       0.72   9436   2 powershell

使用可能なプロパティを決定するには、Get-ProcessGet-Member にパイプ処理します。

Get-Process -Name powershell | Get-Member

Get-Process コマンドを使用すると、Get-Member の結果を表示するときに、既定で表示される一部のプロパティが見つからないことに気づくかもしれません。 この動作は、既定で表示されるいくつかの値 ( NPM(K)PM(K)WS(K)CPU(s)など) が計算プロパティであるためです。 実際のプロパティ名を調べるには、コマンドを Get-Member にパイプ処理する必要があります。

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

出力を生成しない Get-Member にコマンドをパイプすることはできません。 Start-Service では既定では出力が生成されないため、パイプを使用して Get-Member しようとするとエラーが発生します。

Start-Service -Name w32time | Get-Member

Get-Member にパイプ処理するには、コマンドがオブジェクトベースの出力を生成する必要があります。

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

このエラーを回避するには、Start-Service パラメーターを指定します。 前述のように、 PassThru パラメーターを追加すると、通常は出力を生成しないコマンドレットが出力を生成します。

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 は PowerShell ホストに出力を直接表示するように設計されており、オブジェクトベースの出力は生成されません。 その結果、出力をパイプで Get-Member にすることはできません。これにはオブジェクト ベースの入力が必要です。

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

コマンドによって生成されるオブジェクトの種類がわかれば、この情報を使用して、その種類のオブジェクトを入力として受け取るコマンドを見つけることができます。

Get-Command -ParameterType ServiceController

次のコマンドは、パイプラインまたはパラメーター入力を介して ServiceController オブジェクトを受け入れます。

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

章の前提条件で説明したように、このセクションに RSAT がインストールされていることを確認します。 さらに、ラボ環境コンピューターは、ラボ環境 Active Directory ドメインのメンバーである必要があります。

RSAT のインストール後に ActiveDirectory PowerShell モジュールに追加されたコマンドを識別するには、 Get-CommandModule パラメーターと組み合わせて使用します。 次の例では、 ActiveDirectory モジュールで使用できるすべてのコマンドの一覧を示します。

Get-Command -Module ActiveDirectory

合計 147 個のコマンドが ActiveDirectory PowerShell モジュールの一部として追加されました。

これらのコマンドの名前付け規則を確認しましたか? コマンド名の名詞の前に AD が付いているので、他のモジュールのコマンドと名前が競合する可能性を回避できます。 このプレフィックスは、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
...

既定では、 Get-ADUser コマンドレットは、ユーザー オブジェクトの限られたプロパティ セットを取得し、その出力を最初の 1,000 ユーザーに制限します。 この制約は、過剰なデータ取得で Active Directory の負荷が大きくならないように設計されたパフォーマンスの最適化です。

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

Active Directory についての基本的な理解しか持っていない場合でも、ユーザー アカウントのプロパティは、例で示したプロパティよりも多くあると認識できます。

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

Get-ADUser コマンドレットには Properties パラメーターが含まれ、返される追加の、既定以外のプロパティを指定できます。 すべてのプロパティを返すには、パラメーター値として * ワイルドカード文字を使用します。

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

Active Directory ユーザー アカウントのプロパティを取得するための既定の構成は、パフォーマンスの問題を回避するために意図的に制限されています。 運用環境の Active Directory 環境内のすべてのユーザー アカウントのすべてのプロパティを返そうとすると、ドメイン コントローラーとネットワークのパフォーマンスが大幅に低下する可能性があります。 通常、必要なのは特定のユーザーの特定のプロパティのみです。 ただし、使用可能なプロパティを識別する場合は、1 人のユーザーのすべてのプロパティを返すのが妥当です。

プロトタイプを作成するときにコマンドを何度も実行することは珍しくありません。 コマンドのプロトタイプを作成するときにリソースを大量に消費するクエリを実行することが予想される場合は、1 回実行し、結果を変数に格納することを検討してください。 その後、リソースを集中的に使用するクエリを繰り返し実行するよりも、変数の内容をより効率的に操作できます。

たとえば、次のコマンドは、ユーザー アカウントのすべてのプロパティを取得し、結果を $Users という名前の変数に格納します。 $Users コマンドを複数回実行する代わりに、Get-ADUser 変数の内容を操作します。 Active Directory でユーザーの情報が変更された場合、変数の内容は自動的には更新されません。

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

使用可能なプロパティを調べるには、 $Users 変数を Get-Member にパイプ処理します。

$Users | Get-Member -MemberType Properties

NameLastLogonDateLastBadPasswordAttempt などの特定のプロパティを表示するには$Users 変数を Select-Object にパイプします。 このメソッドは、$Users 変数の内容に基づいて目的のプロパティとその値を表示するため、Active Directory に対する複数のクエリが不要になります。 Get-ADUser コマンドを繰り返し実行するよりも、リソース効率の高いアプローチです。

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

Active Directory に対してクエリを実行する場合は、Get-ADUser パラメーターを使用してソースのデータをフィルター処理し、必要なプロパティのみを返します。

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

まとめ

この章では、コマンドによって生成されるオブジェクトの種類を調べる方法、コマンドで使用できるプロパティとメソッドを調べる方法、および既定で返されるプロパティを制限するコマンドを操作する方法を学習しました。

確認

  1. Get-Process コマンドレットではどのような種類のオブジェクトが生成されますか。
  2. コマンドの使用可能なプロパティを調べるにはどうすればよいですか。
  3. 何かを取得するためのコマンドが存在する一方で、それを設定するためのコマンドがない場合、何を確認する必要がありますか。
  4. 既定で出力を返さない一部のコマンドを、出力を生成するためにどのように行うことができますか。
  5. 大量の出力を生成するコマンドのプロトタイプを作成する場合は、何を行うことを検討する必要がありますか?

関連情報

次のステップ

次の章では、ワンライナーとパイプラインについて学習します。