Bagikan melalui


Bab 3 - Menemukan objek, properti, dan metode

PowerShell adalah bahasa skrip berorientasi objek. Ini mewakili data dan status sistem menggunakan objek terstruktur yang berasal dari kelas .NET yang ditentukan dalam .NET Framework. Dengan memanfaatkan .NET Framework, PowerShell menawarkan akses ke berbagai kemampuan sistem, termasuk kelas sistem file, registri, dan Instrumentasi Manajemen Windows (WMI). PowerShell juga memiliki akses ke pustaka kelas .NET Framework, yang berisi banyak koleksi kelas yang dapat Anda gunakan untuk mengembangkan skrip PowerShell yang kuat.

Di PowerShell, setiap item atau status adalah instans objek yang dapat dijelajahi dan dimanipulasi. Get-Member Cmdlet adalah salah satu alat utama yang disediakan oleh PowerShell untuk penemuan objek, yang mengungkapkan karakteristik objek. Bab ini mengeksplorasi bagaimana PowerShell memanfaatkan objek dan bagaimana Anda dapat menemukan dan memanipulasi objek ini untuk merampingkan skrip Anda dan mengelola sistem Anda dengan lebih efisien.

Prasyarat

Untuk mengikuti contoh spesifik dalam bab ini, pastikan komputer lingkungan lab Anda adalah bagian dari domain Direktori Aktif lingkungan lab Anda. Anda juga harus menginstal modul PowerShell Direktori Aktif yang dibundel dengan Windows Remote Server Administration Tools (RSAT). Jika Anda menggunakan Windows 10 build 1809 atau yang lebih baru, termasuk Windows 11, Anda dapat menginstal RSAT sebagai fitur Windows.

Catatan

Direktori Aktif tidak didukung untuk edisi Windows Home.

  • Untuk informasi tentang menginstal RSAT, lihat modul Manajemen Windows.
  • Untuk versi Windows yang lebih lama, lihat RSAT untuk Windows.

Get-Member

Get-Member memberikan wawasan tentang objek, properti, dan metode yang terkait dengan perintah PowerShell. Anda dapat menyalurkan perintah PowerShell apa pun yang menghasilkan output berbasis objek ke Get-Member. Ketika Anda menyalurkan output perintah ke Get-Member, itu mengungkapkan struktur objek yang dikembalikan oleh perintah, merinci properti dan metodenya.

  • Properti: Atribut objek.
  • Metode: Tindakan yang dapat Anda lakukan pada objek.

Untuk menggambarkan konsep ini, pertimbangkan SIM sebagai analogi. Seperti objek apa pun, SIM memiliki properti, seperti warna mata, yang biasanya mencakup blue nilai dan brown . Sebaliknya, metode mewakili tindakan yang dapat Anda lakukan pada objek. Misalnya, Revoke adalah metode yang dapat dilakukan Departemen Kendaraan Bermotor pada SIM.

Properti

Untuk mengambil detail tentang layanan Waktu Windows pada sistem Anda menggunakan PowerShell, gunakan Get-Service cmdlet .

Get-Service -Name w32time

Hasilnya mencakup properti Status, Nama, dan DisplayName . Properti Status menunjukkan bahwa layanan tersebut adalah Running. Nilai untuk properti Nama adalah w32time, dan nilai untuk properti DisplayName adalah Windows Time.

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

Untuk mencantumkan semua properti dan metode yang tersedia untuk Get-Service, pipakan ke Get-Member.

Get-Service -Name w32time | Get-Member

Hasilnya menunjukkan baris pertama berisi satu bagian informasi penting. TypeName mengidentifikasi jenis objek yang dikembalikan, yang dalam contoh ini adalah objek System.ServiceProcess.ServiceController . Nama ini sering disingkat ke bagian terakhir dari TypeName, seperti ServiceController, dalam contoh ini.

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

Perhatikan ketika Anda menyalurkan Get-Service ke Get-Member, ada lebih banyak properti daripada yang ditampilkan secara default. Meskipun properti tambahan ini tidak ditampilkan secara default, Anda dapat memilihnya dengan mempipa dan Select-Object menggunakan parameter Properti . Contoh berikut memilih semua properti dengan mempipa hasil ke Get-ServiceSelect-Object dan menentukan * karakter kartubebas sebagai nilai untuk parameter Properti .

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

Secara default, PowerShell mengembalikan empat properti sebagai tabel dan lima atau lebih sebagai daftar. Namun, beberapa perintah menerapkan pemformatan kustom untuk mengambil alih jumlah properti default yang ditampilkan dalam tabel. Anda dapat menggunakan Format-Table dan Format-List untuk mengambil alih default ini secara manual.

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           :

Properti tertentu juga dapat dipilih menggunakan daftar yang dipisahkan koma sebagai nilai parameter Properti .

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

Anda dapat menggunakan karakter kartubebas saat menentukan nama properti dengan Select-Object.

Dalam contoh berikut, gunakan Can* sebagai salah satu nilai untuk parameter Properti untuk mengembalikan semua properti yang dimulai dengan Can. Ini termasuk CanPauseAndContinue, CanShutdown, dan CanStop.

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

Perhatikan bahwa ada lebih banyak properti yang tercantum daripada yang ditampilkan secara default.

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

Metode

Metode adalah tindakan yang dapat Anda lakukan pada objek. Gunakan parameter MemberType untuk mempersempit hasil Get-Member untuk menampilkan hanya metode untuk Get-Service.

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

Seperti yang Anda lihat, ada beberapa metode.

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

Anda dapat menggunakan metode Hentikan untuk menghentikan layanan Windows. Anda harus menjalankan perintah ini dari sesi PowerShell yang ditingkatkan.

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

Kueri status layanan Windows Time untuk mengonfirmasi bahwa layanan dihentikan.

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

Anda mungkin menggunakan metode dengan hemat, tetapi Anda harus menyadarinya. Terkadang, Anda menemukan Get-* perintah tanpa perintah yang Set-* sesuai. Seringkali, Anda dapat menemukan metode untuk melakukan Set-* tindakan dalam skenario ini. Get-SqlAgentJob Cmdlet dalam modul SqlServer PowerShell adalah contoh yang sangat baik. Tidak ada cmdlet yang Set-* sesuai, tetapi Anda dapat menggunakan metode untuk menyelesaikan tugas yang sama. Untuk informasi selengkapnya tentang modul SqlServer PowerShell dan instruksi penginstalan, lihat gambaran umum PowerShell SQL Server.

Alasan lain untuk mengetahui metode adalah beberapa pengguna PowerShell menganggap Anda tidak dapat membuat perubahan merusak dengan Get-* perintah, tetapi mereka benar-benar dapat menyebabkan masalah parah jika disalahgunakan.

Opsi yang lebih baik adalah menggunakan cmdlet khusus jika ada untuk melakukan tindakan. Misalnya, gunakan Start-Service cmdlet untuk memulai layanan Windows Time.

Secara default, Start-Service, seperti metode Mulai , Get-Servicetidak mengembalikan hasil apa pun. Namun, salah satu manfaat menggunakan cmdlet adalah sering memberikan kemampuan tambahan yang tidak tersedia dengan metode .

Dalam contoh berikut, gunakan parameter PassThru , yang menyebabkan cmdlet yang biasanya tidak menghasilkan output untuk menghasilkan output.

Karena PowerShell tidak berpartisipasi dalam Kontrol Akses Pengguna (UAC), Anda harus menjalankan perintah yang memerlukan elevasi, seperti Start-Service, dari sesi PowerShell yang ditingkatkan.

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

Catatan

Saat bekerja dengan cmdlet PowerShell, penting untuk menghindari pembuatan asumsi tentang outputnya.

Untuk mengambil informasi tentang proses PowerShell yang berjalan di komputer lingkungan lab Anda, gunakan Get-Process cmdlet .

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

Untuk menentukan properti yang tersedia, pipa Get-Process ke Get-Member.

Get-Process -Name powershell | Get-Member

Saat menggunakan Get-Process perintah , Anda mungkin melihat bahwa beberapa properti yang ditampilkan secara default hilang saat Anda melihat hasil .Get-Member Perilaku ini karena beberapa nilai yang ditampilkan secara default, seperti NPM(K), , PM(K)WS(K), dan CPU(s), adalah properti terhitung. Anda harus menyalurkan perintah untuk Get-Member menentukan nama properti aktualnya.

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

Anda tidak dapat menyalurkan perintah ke Get-Member yang tidak menghasilkan output. Karena Start-Service tidak menghasilkan output secara default, mencoba menyalurkannya untuk Get-Member menghasilkan kesalahan.

Start-Service -Name w32time | Get-Member

Catatan

Untuk disalurkan ke Get-Member, perintah harus menghasilkan output berbasis objek.

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

Untuk menghindari kesalahan ini, tentukan parameter PassThru dengan Start-Service. Seperti yang disebutkan sebelumnya, menambahkan parameter PassThru menyebabkan cmdlet yang biasanya tidak menghasilkan output untuk menghasilkan output.

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 dirancang untuk menampilkan output langsung di host PowerShell dan tidak menghasilkan output berbasis objek. Akibatnya, Anda tidak dapat menyalurkan outputnya ke Get-Member, yang memerlukan input berbasis objek.

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

Mengetahui jenis objek yang dihasilkan perintah memungkinkan Anda mencari perintah yang menerima jenis objek tersebut sebagai input.

Get-Command -ParameterType ServiceController

Perintah berikut menerima objek ServiceController melalui input alur atau parameter.

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

Direktori Aktif

Catatan

Seperti disebutkan dalam prasyarat bab, pastikan Anda telah menginstal RSAT untuk bagian ini. Selain itu, komputer lingkungan lab Anda harus menjadi anggota domain Direktori Aktif lingkungan lab Anda.

Untuk mengidentifikasi perintah yang ditambahkan ke modul ActiveDirectory PowerShell setelah Anda menginstal RSAT, gunakan Get-Command dikombinasikan dengan parameter Modul . Contoh berikut mencantumkan semua perintah yang tersedia dalam modul ActiveDirectory .

Get-Command -Module ActiveDirectory

Modul PowerShell ActiveDirectory menambahkan total 147 perintah.

Sudahkah Anda mengamati konvensi penamaan perintah ini? Kata benda dalam nama perintah diawali dengan AD untuk menghindari potensi konflik penamaan dengan perintah di modul lain. Awalan ini adalah praktik umum di antara modul 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
...

Secara default, Get-ADUser cmdlet mengambil serangkaian properti terbatas untuk objek pengguna dan membatasi outputnya ke 1.000 pengguna pertama. Kendala ini adalah pengoptimalan performa yang dirancang untuk menghindari Active Directory yang luar biasa dengan pengambilan data yang berlebihan.

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

Bahkan jika Anda hanya memiliki pemahaman dasar tentang Direktori Aktif, Anda mungkin mengenali bahwa akun pengguna memiliki lebih banyak properti daripada yang ditunjukkan dalam contoh.

   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 Cmdlet menyertakan parameter Properti untuk menentukan properti tambahan di luar default yang ingin Anda ambil. Untuk mengembalikan semua properti, gunakan * karakter kartubebas sebagai nilai parameter.

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

Konfigurasi default untuk mengambil properti akun pengguna Direktori Aktif sengaja dibatasi untuk menghindari masalah performa. Mencoba mengembalikan setiap properti untuk setiap akun pengguna di lingkungan Direktori Aktif produksi Anda dapat sangat menurunkan performa pengontrol dan jaringan domain Anda. Biasanya, Anda hanya memerlukan properti tertentu untuk pengguna tertentu. Namun, mengembalikan semua properti untuk satu pengguna wajar saat mengidentifikasi properti yang tersedia.

Tidak jarang menjalankan perintah beberapa kali saat membuat prototipe. Jika Anda mengantisipasi menjalankan kueri intensif sumber daya saat membuat prototipe perintah, pertimbangkan untuk mengeksekusinya sekali dan menyimpan hasilnya dalam variabel. Kemudian, Anda dapat bekerja dengan konten variabel secara lebih efisien daripada berulang kali menjalankan kueri intensif sumber daya.

Misalnya, perintah berikut mengambil semua properti untuk akun pengguna dan menyimpan hasilnya dalam variabel bernama $Users. Bekerja dengan konten variabel alih-alih $Users menjalankan Get-ADUser perintah beberapa kali. Ingat, konten variabel tidak diperbarui secara otomatis saat informasi pengguna berubah di Direktori Aktif.

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

Anda dapat menjelajahi properti yang tersedia dengan mempipa $Users variabel ke Get-Member.

$Users | Get-Member -MemberType Properties

Untuk melihat properti tertentu seperti Nama, LastLogonDate Metode ini menampilkan properti yang diinginkan dan nilainya berdasarkan konten $Users variabel, menghilangkan kebutuhan akan beberapa kueri ke Direktori Aktif. Ini adalah pendekatan yang lebih efisien sumber daya daripada berulang kali menjalankan Get-ADUser perintah.

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

Saat Anda mengkueri Active Directory, filter data di sumber menggunakan Get-ADUser untuk mengembalikan hanya properti yang diperlukan.

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

Ringkasan

Dalam bab ini, Anda mempelajari cara menentukan jenis objek apa yang dihasilkan perintah, properti dan metode apa yang tersedia untuk perintah, dan cara bekerja dengan perintah yang membatasi properti yang dikembalikan secara default.

Tinjauan

  1. Jenis objek apa yang Get-Process dihasilkan cmdlet?
  2. Bagaimana Anda menentukan properti yang tersedia untuk perintah?
  3. Apa yang harus Anda periksa apakah perintah ada untuk mendapatkan sesuatu tetapi tidak mengatur hal yang sama?
  4. Bagaimana beberapa perintah yang tidak mengembalikan output secara default dibuat untuk menghasilkan output?
  5. Apa yang harus Anda pertimbangkan saat membuat prototipe perintah yang menghasilkan sejumlah besar output?

Referensi

Langkah berikutnya

Di bab berikutnya, Anda akan mempelajari tentang satu baris dan alur.