Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
PowerShell — это объектно-ориентированный язык сценариев. Он представляет данные и состояния системы с помощью структурированных объектов, производных от классов .NET, определенных в платформа .NET Framework. Используя платформа .NET Framework, PowerShell предоставляет доступ к различным системным возможностям, включая файловую систему, реестр и классы инструментария управления Windows (WMI). PowerShell также имеет доступ к библиотеке классов платформа .NET Framework, которая содержит обширную коллекцию классов, которые можно использовать для разработки надежных сценариев PowerShell.
В PowerShell каждый элемент или состояние является экземпляром объекта, который можно исследовать и управлять ими.
Командлет Get-Member
является одним из основных средств, предоставляемых PowerShell для обнаружения объектов; эти средства показывают характеристики объекта. В этой главе описывается, как PowerShell использует объекты и как можно обнаруживать и управлять этими объектами для упрощения сценариев и более эффективного управления системами.
Предварительные условия
Чтобы следовать конкретным примерам в этой главе, убедитесь, что компьютер среды лаборатории является частью домена Active Directory лабораторной среды. Кроме того, необходимо установить модуль PowerShell Active Directory, входящий в комплект со средствами удаленного администрирования Windows (RSAT). Если вы используете Windows 10 сборки 1809 или более поздней версии, включая Windows 11, вы можете установить RSAT в качестве компонента Windows.
Примечание.
Active Directory не поддерживается для выпусков Windows Home.
- Сведения об установке RSAT см. в разделе "Управление Windows".
- Для более ранних версий Windows см. RSAT для Windows.
Get-Member
Get-Member
предоставляет аналитические сведения о объектах, свойствах и методах, связанных с командами PowerShell. Вы можете передать любую команду PowerShell, которая создает выходные данные на основе объектов Get-Member
.
Когда вы перенаправляете вывод команды в Get-Member
, отображается структура объекта, возвращаемого командой, с подробными сведениями о его свойствах и методах.
- Свойства: атрибуты объекта.
- Методы: действия, которые можно выполнить для объекта.
Чтобы проиллюстрировать эту концепцию, рассмотрим водительскую лицензию как аналогию. Как и любой объект, водительское удостоверение имеет свойства, такие как цвет глаз, который обычно включает blue
и brown
значения.
Напротив, методы представляют действия, которые можно выполнить для объекта. Например, Аннулирование — это метод, который департамент транспортных средств может применить к водительскому удостоверению.
Свойства
Чтобы получить сведения о службе Windows Time в вашей системе с помощью PowerShell, используйте командлет Get-Service
.
Get-Service -Name w32time
Результаты включают свойства Status, Name и DisplayName . Свойство Status указывает, что служба имеет значение Running
. Значение свойства Name имеет значение w32time
, а для свойства DisplayName — Windows Time
значение.
Status Name DisplayName
------ ---- -----------
Running w32time Windows Time
Чтобы перечислить все доступные свойства и методы для Get-Service
, переведите его в Get-Member
.
Get-Service -Name w32time | Get-Member
Результаты показывают, что первая строка содержит одну часть значительной информации. 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
и указывая *
подстановочный знак в качестве значения параметра Property.
Get-Service -Name w32time | Select-Object -Property *
По умолчанию PowerShell возвращает четыре свойства в виде таблицы и пять или более в виде списка. Однако некоторые команды применяют настраиваемое форматирование, чтобы переопределить число свойств по умолчанию, отображаемых в таблице.
Вы можете использовать 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 , чтобы вернуть все свойства, начинающиеся с 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
Методы
Методы — это действия, которые можно выполнить для объекта. Используйте параметр MemberType, чтобы сузить результаты 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
в модуле SqlServer PowerShell является отличным примером. Соответствующий Set-*
командлет не существует, но вы можете использовать метод, чтобы выполнить ту же задачу. Дополнительные сведения о модуле SqlServer PowerShell и инструкциях по установке см. в обзоре SQL Server PowerShell.
Другая причина, по которой следует знать о методах, заключается в том, что некоторые пользователи PowerShell предполагают, что вы не можете вносить разрушительные изменения с Get-*
помощью команд, но на самом деле могут вызвать серьезные проблемы при неправильном использовании.
Лучше использовать выделенный командлет, если он существует для выполнения действия. Например, используйте Start-Service
командлет для запуска службы времени Windows.
По умолчанию Start-Service
, как и метод , не возвращает никаких результатов.
Однако одним из преимуществ использования командлета является то, что он часто дает дополнительные возможности, которые недоступны с помощью метода.
В следующем примере используйте параметр PassThru, который заставляет командлет, обычно не создающий выходные данные, генерировать их.
Поскольку PowerShell не участвует в Контроле учетных записей пользователей (UAC), необходимо выполнять команды, требующие повышения прав, например Start-Service
, из сеанса PowerShell с повышенными привилегиями.
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
Чтобы избежать этой ошибки, укажите параметр PassThru с 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 лабораторной среды.
Чтобы определить команды, добавленные в модуль ActiveDirectory PowerShell после установки RSAT, используйте Get-Command
вместе с параметром Module. В следующем примере перечислены все команды, доступные в модуле ActiveDirectory .
Get-Command -Module ActiveDirectory
Модуль ActiveDirectory PowerShell добавил в общей сложности 147 команд.
Вы заметили, как именуются эти команды? Существительные в названиях команд имеют префикс 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
извлекает ограниченный набор свойств для пользовательских объектов и ограничивает выходные данные до первых 1000 пользователей. Это ограничение является оптимизацией производительности, предназначенной для предотвращения перегрузки 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 может значительно снизить производительность контроллеров домена и сети. Обычно для определенных пользователей требуются только определенные свойства. Однако возврат всех свойств для одного пользователя является разумным при определении доступных свойств.
Нередко приходится выполнять команду несколько раз при тестировании прототипа. Если при создании прототипа команды ожидается выполнение запроса с интенсивным ресурсом, попробуйте выполнить его один раз и сохранить результаты в переменной. Затем можно эффективнее работать с содержимым переменной, чем многократно выполнять ресурсоемкий запрос.
Например, следующая команда извлекает все свойства для учетной записи пользователя и сохраняет результаты в переменной с именем $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 -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
- о_свойствах
- о_методах
- Нет командлета PowerShell для запуска или остановки чего-либо? Не забудьте проверить наличие методов в командлетах Get
Следующие шаги
В следующей главе вы узнаете об однострочниках и конвейере.
PowerShell