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
結果には、 Status、 Name、および DisplayName プロパティが含まれます。
Status プロパティは、サービスが Running
されていることを示します。
Name プロパティの値は w32time
、DisplayName プロパティの値は 、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-Table
と Format-List
を使用して、これらの既定値を手動で上書きできます。
Name : w32time
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
DisplayName : Windows Time
DependentServices : {}
MachineName : .
ServiceName : w32time
ServicesDependedOn : {}
ServiceHandle :
Status : Running
ServiceType : Win32OwnProcess, Win32ShareProcess
StartType : Manual
Site :
Container :
特定のプロパティは、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
で始まるすべてのプロパティが返されます。 これらには、CanPauseAndContinue、CanShutdown、および 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-Process
を Get-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-Command
を Module パラメーターと組み合わせて使用します。 次の例では、 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
Name、LastLogonDate、LastBadPasswordAttempt などの特定のプロパティを表示するには$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
まとめ
この章では、コマンドによって生成されるオブジェクトの種類を調べる方法、コマンドで使用できるプロパティとメソッドを調べる方法、および既定で返されるプロパティを制限するコマンドを操作する方法を学習しました。
確認
-
Get-Process
コマンドレットではどのような種類のオブジェクトが生成されますか。 - コマンドの使用可能なプロパティを調べるにはどうすればよいですか。
- 何かを取得するためのコマンドが存在する一方で、それを設定するためのコマンドがない場合、何を確認する必要がありますか。
- 既定で出力を返さない一部のコマンドを、出力を生成するためにどのように行うことができますか。
- 大量の出力を生成するコマンドのプロトタイプを作成する場合は、何を行うことを検討する必要がありますか?
関連情報
- Get-Member
- オブジェクトの構造を表示する (Get-member)
- about_Objects
- プロパティについて
- about_Methods
- 何かを開始または停止する PowerShell コマンドレットがない場合、 Get コマンドレットのメソッドを確認することを忘れないでください
次のステップ
次の章では、ワンライナーとパイプラインについて学習します。
PowerShell