Hoofdstuk 3: Objecten, eigenschappen en methoden detecteren
Mijn eerste inleiding tot computers was een Commodore 64, maar mijn eerste moderne computer was een 286 12-Mhz IBM-kloon met 1 megabyte aan geheugen, een harde schijf van 40 megabyte en een diskettestation van 5-1/4 inch met een CGA-monitor met Microsoft DOS 3.3.
Veel IT-professionals, zoals ikzelf, zijn niet vreemd voor de opdrachtregel, maar wanneer het onderwerp van objecten, eigenschappen en methoden opkomt, krijgen ze de herten in de koplampen eruit en zeggen: "Ik ben geen ontwikkelaar." Raad eens wat? U hoeft geen ontwikkelaar te zijn om succesvol te zijn met PowerShell. Verdomde niet in de terminologie. Niet alles kan in eerste instantie zinvol zijn, maar na een beetje praktijkervaring zul je die 'gloeilamp' momenten hebben. "Aha! Dat is waar het boek het over had."
Zorg ervoor dat u de voorbeelden op uw computer probeert om een deel van die praktische ervaring te krijgen.
Vereisten
De Active Directory PowerShell-module is vereist voor enkele voorbeelden die in dit hoofdstuk worden weergegeven. De module maakt deel uit van de Remote Server Beheer istration Tools (RSAT) voor Windows. Voor de build van 1809 (of hoger) van Windows worden de RSAT-hulpprogramma's geïnstalleerd als een Windows-functie. Ondersteuning voor Active Directory is niet beschikbaar op Windows Home.
- Zie Windows Management-modules voor meer informatie over het installeren van de RSAT-hulpprogramma's.
- Zie RSAT voor Windows voor oudere versies van Windows.
Get-Member
Get-Member
helpt u te ontdekken welke objecten, eigenschappen en methoden beschikbaar zijn voor opdrachten.
Elke opdracht die objectgebaseerde uitvoer produceert, kan worden doorgesluisd naar Get-Member
. Een eigenschap is een kenmerk van een item. Uw rijbewijs heeft een eigenschap genaamd oogkleur en de meest voorkomende waarden voor die eigenschap zijn blauw en bruin. Een methode is een actie die kan worden uitgevoerd op een item. Bij het verblijf bij het rijbewijsvoorbeeld is een van de methoden 'Intrekken' omdat de afdeling van motorvoertuigen uw rijbewijs kan intrekken.
Eigenschappen
In het volgende voorbeeld haal ik informatie op over de Windows Time-service die op mijn computer wordt uitgevoerd.
Get-Service -Name w32time
Status Name DisplayName
------ ---- -----------
Running w32time Windows Time
Status, Name en DisplayName zijn voorbeelden van eigenschappen, zoals wordt weergegeven in de vorige set resultaten. De waarde voor de eigenschap Status is Running
, de waarde voor de eigenschap Naam is w32time
en de waarde voor DisplayName is Windows Time
.
Nu sluis ik dezelfde opdracht door naar Get-Member
:
Get-Service -Name w32time | Get-Member
TypeName: System.ServiceProcess.ServiceController
Name MemberType Definition
---- ---------- ----------
Name AliasProperty Name = ServiceName
RequiredServices AliasProperty RequiredServices = ServicesDependedOn
Disposed Event System.EventHandler Disposed(System.Object, Sy...
Close Method void Close()
Continue Method void Continue()
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(ty...
Dispose Method void Dispose(), void IDisposable.Dispose()
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 InitializeLifetimeService()
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.ServiceProcess.Servi...
CanPauseAndContinue Property bool CanPauseAndContinue {get;}
CanShutdown Property bool CanShutdown {get;}
CanStop Property bool CanStop {get;}
Container Property System.ComponentModel.IContainer Container {get;}
DependentServices Property System.ServiceProcess.ServiceController[] Depe...
DisplayName Property string DisplayName {get;set;}
MachineName Property string MachineName {get;set;}
ServiceHandle Property System.Runtime.InteropServices.SafeHandle Serv...
ServiceName Property string ServiceName {get;set;}
ServicesDependedOn Property System.ServiceProcess.ServiceController[] Serv...
ServiceType Property System.ServiceProcess.ServiceType ServiceType ...
Site Property System.ComponentModel.ISite Site {get;set;}
StartType Property System.ServiceProcess.ServiceStartMode StartTy...
Status Property System.ServiceProcess.ServiceControllerStatus ...
ToString ScriptMethod System.Object ToString();
De eerste regel van de resultaten in het vorige voorbeeld bevat één stukje zeer belangrijke informatie. TypeName geeft aan welk type object is geretourneerd. In dit voorbeeld is een System.ServiceProcess.ServiceController-object geretourneerd. Dit wordt vaak afgekort als het gedeelte van de TypeName net na de laatste periode; ServiceController in dit voorbeeld.
Zodra u weet welk type object een opdracht produceert, kunt u deze informatie gebruiken om opdrachten te vinden die dat type object accepteren als invoer.
Get-Command -ParameterType ServiceController
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-Service 3.1.0.0 Microsof...
Cmdlet Restart-Service 3.1.0.0 Microsof...
Cmdlet Resume-Service 3.1.0.0 Microsof...
Cmdlet Set-Service 3.1.0.0 Microsof...
Cmdlet Start-Service 3.1.0.0 Microsof...
Cmdlet Stop-Service 3.1.0.0 Microsof...
Cmdlet Suspend-Service 3.1.0.0 Microsof...
Al deze opdrachten hebben een parameter die een ServiceController-objecttype accepteert op pijplijn, parameterinvoer of beide.
U ziet dat er meer eigenschappen zijn dan standaard wordt weergegeven. Hoewel deze aanvullende eigenschappen niet standaard worden weergegeven, kunnen ze uit de pijplijn worden geselecteerd door de opdracht door te geven aan de Select-Object
cmdlet en de parameter Eigenschap te gebruiken. In het volgende voorbeeld worden alle eigenschappen geselecteerd door de resultaten ervan Get-Service
door te Select-Object
sluizen en het *
jokerteken op te geven als de waarde voor de parameter Eigenschap .
Get-Service -Name w32time | Select-Object -Property *
Name : w32time
RequiredServices : {}
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
DisplayName : Windows Time
DependentServices : {}
MachineName : .
ServiceName : w32time
ServicesDependedOn : {}
ServiceHandle : SafeServiceHandle
Status : Running
ServiceType : Win32ShareProcess
StartType : Manual
Site :
Container :
Specifieke eigenschappen kunnen ook worden geselecteerd met behulp van een door komma's gescheiden lijst voor de waarde van de parameter Eigenschap .
Get-Service -Name w32time | Select-Object -Property Status, Name, DisplayName, ServiceType
Status Name DisplayName ServiceType
------ ---- ----------- -----------
Running w32time Windows Time Win32ShareProcess
Standaard worden vier eigenschappen geretourneerd in een tabel en worden er vijf of meer geretourneerd in een lijst. Sommige opdrachten gebruiken aangepaste opmaak om te overschrijven hoeveel eigenschappen standaard worden weergegeven in een tabel.
Er zijn verschillende Format-*
cmdlets die kunnen worden gebruikt om deze standaardinstellingen handmatig te overschrijven. De meest voorkomende zijn Format-Table
en Format-List
, beide zullen in een volgend hoofdstuk worden behandeld.
Jokertekens kunnen worden gebruikt bij het opgeven van de eigenschapsnamen met Select-Object
.
Get-Service -Name w32time | Select-Object -Property Status, DisplayName, Can*
Status : Running
DisplayName : Windows Time
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
In het vorige voorbeeld Can*
is gebruikt als een van de waarden voor de parameter Eigenschap om alle eigenschappen te retourneren die beginnen met Can
. Deze omvatten CanPauseAndContinue, CanShutdown en CanStop.
Methoden
Methoden zijn een actie die kan worden uitgevoerd. Gebruik de parameter MemberType om de resultaten te beperken, Get-Member
zodat alleen de methoden voor Get-Service
worden weergegeven.
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 CreateObjRef(type ...
Dispose Method void Dispose(), void IDisposable.Dispose()
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 InitializeLifetimeService()
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.ServiceProcess.ServiceC...
Zoals u kunt zien, zijn er veel methoden. De stopmethode kan worden gebruikt om een Windows-service te stoppen.
(Get-Service -Name w32time).Stop()
Nu om te controleren of de Windows Time-service inderdaad is gestopt.
Get-Service -Name w32time
Status Name DisplayName
------ ---- -----------
Stopped w32time Windows Time
Ik vind mezelf zelden met behulp van methoden, maar ze zijn iets waar je rekening mee moet houden. Er zijn tijden dat u een Get-*
opdracht tegenkomt zonder een bijbehorende opdracht om dat item te wijzigen.
Vaak kan een methode worden gebruikt om een actie uit te voeren waarmee deze wordt gewijzigd. De Get-SqlAgentJob
cmdlet in de SqlServer PowerShell-module is een goed voorbeeld hiervan. De module wordt geïnstalleerd als onderdeel van SQL Server Management Studio (SMSS). Er bestaat geen bijbehorende Set-*
cmdlet, maar er kan een methode worden gebruikt om dezelfde taak te voltooien.
Een andere reden om op de hoogte te zijn van methoden is dat veel beginners ervan uitgaan dat destructieve wijzigingen niet kunnen worden aangebracht met Get-*
opdrachten. Maar ze kunnen inderdaad ernstige problemen veroorzaken als ze ongepast worden gebruikt.
Een betere optie is om een cmdlet te gebruiken om de actie uit te voeren als deze bestaat. Start de Windows Time-service, behalve deze keer gebruikt u de cmdlet voor het starten van services.
Get-Service -Name w32time | Start-Service -PassThru
Status Name DisplayName
------ ---- -----------
Running w32time Windows Time
Start-Service
Standaard worden er geen resultaten geretourneerd, net zoals de startmethode van Get-Service
.
Maar een van de voordelen van het gebruik van een cmdlet is dat vaak de cmdlet extra functionaliteit biedt die niet beschikbaar is met een methode. In het vorige voorbeeld is de Parameter PassThru gebruikt. Dit zorgt ervoor dat een cmdlet die normaal gesproken geen uitvoer produceert, uitvoer produceert.
Wees voorzichtig met veronderstellingen over de uitvoer van een cmdlet. We weten allemaal wat er gebeurt als je van dingen uitgaat. Ik haal informatie op over het PowerShell-proces dat wordt uitgevoerd op mijn Windows 10-testomgevingscomputer.
Get-Process -Name PowerShell
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
922 48 107984 140552 2.84 9020 1 powershell
Nu sluis ik dezelfde opdracht door naar Get-Member:
Get-Process -Name PowerShell | 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(System.Object, ...
ErrorDataReceived Event System.Diagnostics.DataReceivedEventHandler ...
Exited Event System.EventHandler Exited(System.Object, Sy...
OutputDataReceived Event System.Diagnostics.DataReceivedEventHandler ...
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 CreateObjRef(...
Dispose Method void Dispose(), void IDisposable.Dispose()
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetLifetimeService Method System.Object GetLifetimeService()
GetType Method type GetType()
InitializeLifetimeService Method System.Object InitializeLifetimeService()
Kill Method void Kill()
Refresh Method void Refresh()
Start Method bool Start()
ToString Method string ToString()
WaitForExit Method bool WaitForExit(int milliseconds), void Wai...
WaitForInputIdle Method bool WaitForInputIdle(int milliseconds), boo...
__NounName NoteProperty string __NounName=Process
BasePriority Property int BasePriority {get;}
Container Property System.ComponentModel.IContainer Container {...
EnableRaisingEvents Property bool EnableRaisingEvents {get;set;}
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.ProcessModule MainModule ...
MainWindowHandle Property System.IntPtr MainWindowHandle {get;}
MainWindowTitle Property string MainWindowTitle {get;}
MaxWorkingSet Property System.IntPtr MaxWorkingSet {get;set;}
MinWorkingSet Property System.IntPtr MinWorkingSet {get;set;}
Modules Property System.Diagnostics.ProcessModuleCollection M...
NonpagedSystemMemorySize Property int NonpagedSystemMemorySize {get;}
NonpagedSystemMemorySize64 Property long NonpagedSystemMemorySize64 {get;}
PagedMemorySize Property int PagedMemorySize {get;}
PagedMemorySize64 Property long PagedMemorySize64 {get;}
PagedSystemMemorySize Property int PagedSystemMemorySize {get;}
PagedSystemMemorySize64 Property long PagedSystemMemorySize64 {get;}
PeakPagedMemorySize Property int PeakPagedMemorySize {get;}
PeakPagedMemorySize64 Property long PeakPagedMemorySize64 {get;}
PeakVirtualMemorySize Property int PeakVirtualMemorySize {get;}
PeakVirtualMemorySize64 Property long PeakVirtualMemorySize64 {get;}
PeakWorkingSet Property int PeakWorkingSet {get;}
PeakWorkingSet64 Property long PeakWorkingSet64 {get;}
PriorityBoostEnabled Property bool PriorityBoostEnabled {get;set;}
PriorityClass Property System.Diagnostics.ProcessPriorityClass Prio...
PrivateMemorySize Property int PrivateMemorySize {get;}
PrivateMemorySize64 Property long PrivateMemorySize64 {get;}
PrivilegedProcessorTime Property timespan PrivilegedProcessorTime {get;}
ProcessName Property string ProcessName {get;}
ProcessorAffinity Property System.IntPtr ProcessorAffinity {get;set;}
Responding Property bool Responding {get;}
SafeHandle Property Microsoft.Win32.SafeHandles.SafeProcessHandl...
SessionId Property int SessionId {get;}
Site Property System.ComponentModel.ISite Site {get;set;}
StandardError Property System.IO.StreamReader StandardError {get;}
StandardInput Property System.IO.StreamWriter StandardInput {get;}
StandardOutput Property System.IO.StreamReader StandardOutput {get;}
StartInfo Property System.Diagnostics.ProcessStartInfo StartInf...
StartTime Property datetime StartTime {get;}
SynchronizingObject Property System.ComponentModel.ISynchronizeInvoke Syn...
Threads Property System.Diagnostics.ProcessThreadCollection T...
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, PriorityClass, Fi...
PSResources PropertySet PSResources {Name, Id, Handlecount, WorkingS...
Company ScriptProperty System.Object Company {get=$this.Mainmodule....
CPU ScriptProperty System.Object CPU {get=$this.TotalProcessorT...
Description ScriptProperty System.Object Description {get=$this.Mainmod...
FileVersion ScriptProperty System.Object FileVersion {get=$this.Mainmod...
Path ScriptProperty System.Object Path {get=$this.Mainmodule.Fil...
Product ScriptProperty System.Object Product {get=$this.Mainmodule....
ProductVersion ScriptProperty System.Object ProductVersion {get=$this.Main...
U ziet dat er meer eigenschappen worden weergegeven dan standaard wordt weergegeven. Een aantal standaardeigenschappen dat wordt weergegeven, worden niet weergegeven als eigenschappen bij het weergeven van de resultaten van Get-Member
. Dit komt doordat veel van de weergegeven waarden, zoals NPM(K)
, PM(K)
, WS(K)
en CPU(s)
, berekende eigenschappen zijn. Als u de werkelijke eigenschapsnamen wilt bepalen, moet de opdracht worden doorgesluisd naar Get-Member
.
Als een opdracht geen uitvoer produceert, kan deze niet worden doorgesluisd naar Get-Member
. Omdat Start-Service
er standaard geen uitvoer wordt geproduceerd, wordt er een fout gegenereerd wanneer u deze probeert door te geven.Get-Member
Start-Service -Name w32time | 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], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMembe
rCommand
De PassThru-parameter kan worden opgegeven met de Start-Service
cmdlet om uitvoer te produceren, die vervolgens zonder fouten wordt Get-Member
doorgesluisd.
Start-Service -Name w32time -PassThru | Get-Member
TypeName: System.ServiceProcess.ServiceController
Name MemberType Definition
---- ---------- ----------
Name AliasProperty Name = ServiceName
RequiredServices AliasProperty RequiredServices = ServicesDependedOn
Disposed Event System.EventHandler Disposed(System.Object, Sy...
Close Method void Close()
Continue Method void Continue()
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(ty...
Dispose Method void Dispose(), void IDisposable.Dispose()
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 InitializeLifetimeService()
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.ServiceProcess.Servi...
CanPauseAndContinue Property bool CanPauseAndContinue {get;}
CanShutdown Property bool CanShutdown {get;}
CanStop Property bool CanStop {get;}
Container Property System.ComponentModel.IContainer Container {get;}
DependentServices Property System.ServiceProcess.ServiceController[] Depe...
DisplayName Property string DisplayName {get;set;}
MachineName Property string MachineName {get;set;}
ServiceHandle Property System.Runtime.InteropServices.SafeHandle Serv...
ServiceName Property string ServiceName {get;set;}
ServicesDependedOn Property System.ServiceProcess.ServiceController[] Serv...
ServiceType Property System.ServiceProcess.ServiceType ServiceType ...
Site Property System.ComponentModel.ISite Site {get;set;}
StartType Property System.ServiceProcess.ServiceStartMode StartTy...
Status Property System.ServiceProcess.ServiceControllerStatus ...
ToString ScriptMethod System.Object ToString();
Als u wilt doorsluisen naar Get-Member
, moet een opdracht uitvoer op basis van objecten produceren.
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], InvalidOperationException
+ FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand
Out-Host
schrijft rechtstreeks naar de PowerShell-host, maar produceert geen uitvoer op basis van objecten voor de pijplijn. Het kan dus niet worden doorgesluisd naar Get-Member
.
Active Directory
Notitie
De hulpprogramma's voor externe server Beheer istration die worden vermeld in de sectie Vereisten van dit hoofdstuk, zijn vereist om deze sectie te voltooien. Zoals vermeld in de inleiding tot dit boek, moet uw Windows 10-testomgevingcomputer lid zijn van het domein van de testomgeving.
Gebruik Get-Command
met de moduleparameter om te bepalen welke opdrachten zijn toegevoegd als onderdeel van de ActiveDirectory PowerShell-module wanneer de externe serverbeheerprogramma's zijn geïnstalleerd.
Get-Command -Module ActiveDirectory
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Add-ADCentralAccessPolicyMember 1.0.0.0 ActiveDi...
Cmdlet Add-ADComputerServiceAccount 1.0.0.0 ActiveDi...
Cmdlet Add-ADDomainControllerPasswordReplicationPolicy 1.0.0.0 ActiveDi...
Cmdlet Add-ADFineGrainedPasswordPolicySubject 1.0.0.0 ActiveDi...
Cmdlet Add-ADGroupMember 1.0.0.0 ActiveDi...
Cmdlet Add-ADPrincipalGroupMembership 1.0.0.0 ActiveDi...
Cmdlet Add-ADResourcePropertyListMember 1.0.0.0 ActiveDi...
Cmdlet Clear-ADAccountExpiration 1.0.0.0 ActiveDi...
Cmdlet Clear-ADClaimTransformLink 1.0.0.0 ActiveDi...
Cmdlet Disable-ADAccount 1.0.0.0 ActiveDi...
...
Er zijn in totaal 147 opdrachten toegevoegd als onderdeel van de ActiveDirectory PowerShell-module. Sommige opdrachten van deze opdrachten retourneren standaard slechts een gedeelte van de beschikbare eigenschappen.
Hebt u iets anders gezien over de namen van de opdrachten in deze module? Het zelfstandig naamwoordgedeelte van de opdrachten heeft een AD-voorvoegsel. Dit is gebruikelijk voor de opdrachten van de meeste modules. Het voorvoegsel is ontworpen om naamconflicten te voorkomen.
Get-ADUser -Identity mike | Get-Member
TypeName: Microsoft.ActiveDirectory.Management.ADUser
Name MemberType Definition
---- ---------- ----------
Contains Method bool Contains(string propertyName)
Equals Method bool Equals(System.Object obj)
GetEnumerator Method System.Collections.IDictionaryEnumerator GetEn...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Item ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropert...
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, Vers...
SamAccountName Property System.String SamAccountName {get;set;}
SID Property System.Security.Principal.SecurityIdentifier S...
Surname Property System.String Surname {get;set;}
UserPrincipalName Property System.String UserPrincipalName {get;set;}
Zelfs als u slechts vaag bekend bent met Active Directory, weet u waarschijnlijk dat een gebruikersaccount meer eigenschappen heeft dan in dit voorbeeld wordt weergegeven.
De Get-ADUser
cmdlet heeft een parameter Properties die wordt gebruikt om de aanvullende (niet-standaard) eigenschappen op te geven die u wilt retourneren. Als u het *
jokerteken opgeeft, worden deze allemaal geretourneerd.
Get-ADUser -Identity mike -Properties * | Get-Member
TypeName: Microsoft.ActiveDirectory.Management.ADUser
Name MemberType Definition
---- ---------- ----------
Contains Method bool Contains(string proper...
Equals Method bool Equals(System.Object obj)
GetEnumerator Method System.Collections.IDiction...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Item ParameterizedProperty Microsoft.ActiveDirectory.M...
AccountExpirationDate Property System.DateTime AccountExpi...
accountExpires Property System.Int64 accountExpires...
AccountLockoutTime Property System.DateTime AccountLock...
AccountNotDelegated Property System.Boolean AccountNotDe...
AllowReversiblePasswordEncryption Property System.Boolean AllowReversi...
AuthenticationPolicy Property Microsoft.ActiveDirectory.M...
AuthenticationPolicySilo Property Microsoft.ActiveDirectory.M...
BadLogonCount Property System.Int32 BadLogonCount ...
badPasswordTime Property System.Int64 badPasswordTim...
badPwdCount Property System.Int32 badPwdCount {g...
CannotChangePassword Property System.Boolean CannotChange...
CanonicalName Property System.String CanonicalName...
Certificates Property Microsoft.ActiveDirectory.M...
City Property System.String City {get;set;}
CN Property System.String CN {get;}
codePage Property System.Int32 codePage {get;...
Company Property System.String Company {get;...
CompoundIdentitySupported Property Microsoft.ActiveDirectory.M...
Country Property System.String Country {get;...
countryCode Property System.Int32 countryCode {g...
Created Property System.DateTime Created {get;}
createTimeStamp Property System.DateTime createTimeS...
Deleted Property System.Boolean Deleted {get;}
Department Property System.String Department {g...
Description Property System.String Description {...
DisplayName Property System.String DisplayName {...
DistinguishedName Property System.String Distinguished...
Division Property System.String Division {get...
DoesNotRequirePreAuth Property System.Boolean DoesNotRequi...
dSCorePropagationData Property Microsoft.ActiveDirectory.M...
EmailAddress Property System.String EmailAddress ...
EmployeeID Property System.String EmployeeID {g...
EmployeeNumber Property System.String EmployeeNumbe...
Enabled Property System.Boolean Enabled {get...
Fax Property System.String Fax {get;set;}
GivenName Property System.String GivenName {ge...
HomeDirectory Property System.String HomeDirectory...
HomedirRequired Property System.Boolean HomedirRequi...
HomeDrive Property System.String HomeDrive {ge...
HomePage Property System.String HomePage {get...
HomePhone Property System.String HomePhone {ge...
Initials Property System.String Initials {get...
instanceType Property System.Int32 instanceType {...
isDeleted Property System.Boolean isDeleted {g...
KerberosEncryptionType Property Microsoft.ActiveDirectory.M...
LastBadPasswordAttempt Property System.DateTime LastBadPass...
LastKnownParent Property System.String LastKnownPare...
lastLogoff Property System.Int64 lastLogoff {ge...
lastLogon Property System.Int64 lastLogon {get...
LastLogonDate Property System.DateTime LastLogonDa...
lastLogonTimestamp Property System.Int64 lastLogonTimes...
LockedOut Property System.Boolean LockedOut {g...
logonCount Property System.Int32 logonCount {ge...
LogonWorkstations Property System.String LogonWorkstat...
Manager Property System.String Manager {get;...
MemberOf Property Microsoft.ActiveDirectory.M...
MNSLogonAccount Property System.Boolean MNSLogonAcco...
MobilePhone Property System.String MobilePhone {...
Modified Property System.DateTime Modified {g...
modifyTimeStamp Property System.DateTime modifyTimeS...
msDS-User-Account-Control-Computed Property System.Int32 msDS-User-Acco...
Name Property System.String Name {get;}
nTSecurityDescriptor Property System.DirectoryServices.Ac...
ObjectCategory Property System.String ObjectCategor...
ObjectClass Property System.String ObjectClass {...
ObjectGUID Property System.Nullable`1[[System.G...
objectSid Property System.Security.Principal.S...
Office Property System.String Office {get;s...
OfficePhone Property System.String OfficePhone {...
Organization Property System.String Organization ...
OtherName Property System.String OtherName {ge...
PasswordExpired Property System.Boolean PasswordExpi...
PasswordLastSet Property System.DateTime PasswordLas...
PasswordNeverExpires Property System.Boolean PasswordNeve...
PasswordNotRequired Property System.Boolean PasswordNotR...
POBox Property System.String POBox {get;set;}
PostalCode Property System.String PostalCode {g...
PrimaryGroup Property System.String PrimaryGroup ...
primaryGroupID Property System.Int32 primaryGroupID...
PrincipalsAllowedToDelegateToAccount Property Microsoft.ActiveDirectory.M...
ProfilePath Property System.String ProfilePath {...
ProtectedFromAccidentalDeletion Property System.Boolean ProtectedFro...
pwdAnswer Property System.String pwdAnswer {ge...
pwdLastSet Property System.Int64 pwdLastSet {ge...
pwdQuestion Property System.String pwdQuestion {...
SamAccountName Property System.String SamAccountNam...
sAMAccountType Property System.Int32 sAMAccountType...
ScriptPath Property System.String ScriptPath {g...
sDRightsEffective Property System.Int32 sDRightsEffect...
ServicePrincipalNames Property Microsoft.ActiveDirectory.M...
SID Property System.Security.Principal.S...
SIDHistory Property Microsoft.ActiveDirectory.M...
SmartcardLogonRequired Property System.Boolean SmartcardLog...
sn Property System.String sn {get;set;}
State Property System.String State {get;set;}
StreetAddress Property System.String StreetAddress...
Surname Property System.String Surname {get;...
Title Property System.String Title {get;set;}
TrustedForDelegation Property System.Boolean TrustedForDe...
TrustedToAuthForDelegation Property System.Boolean TrustedToAut...
UseDESKeyOnly Property System.Boolean UseDESKeyOnl...
userAccountControl Property System.Int32 userAccountCon...
userCertificate Property Microsoft.ActiveDirectory.M...
UserPrincipalName Property System.String UserPrincipal...
uSNChanged Property System.Int64 uSNChanged {get;}
uSNCreated Property System.Int64 uSNCreated {get;}
whenChanged Property System.DateTime whenChanged...
whenCreated Property System.DateTime whenCreated...
Nu lijkt dat er meer op.
Kunt u een reden bedenken waarom de eigenschappen van een Active Directory-gebruikersaccount standaard zo beperkt zijn? Stel dat u elke eigenschap hebt geretourneerd voor elk gebruikersaccount in uw Active Directory-productieomgeving. Denk aan de prestatievermindering die u kunt veroorzaken, niet alleen voor de domeincontrollers zelf, maar ook voor uw netwerk. Het is twijfelachtig dat je eigenlijk elke eigenschap toch nodig hebt. Het retourneren van alle eigenschappen voor één gebruikersaccount is perfect acceptabel wanneer u probeert te bepalen welke eigenschappen er bestaan.
Het is niet ongebruikelijk om een opdracht vaak uit te voeren wanneer u deze prototypen maakt. Als u een enorme query gaat uitvoeren, voert u een query uit en slaat u de resultaten op in een variabele. Werk vervolgens met de inhoud van de variabele in plaats van herhaaldelijk een dure query te gebruiken.
$Users = Get-ADUser -Identity mike -Properties *
Gebruik de inhoud van de $Users
variabele in plaats van de vorige opdracht meerdere keren uit te voeren.
Houd er rekening mee dat de inhoud van de variabele niet wordt bijgewerkt wanneer wijzigingen worden aangebracht aan die gebruiker in Active Directory.
U kunt de $Users
variabele doorsluisen om de beschikbare eigenschappen te Get-Member
detecteren.
$Users | Get-Member
Selecteer vervolgens de afzonderlijke eigenschappen door door te sluisen $Users
naar Select-Object
, allemaal zonder dat u meer dan één keer een query op Active Directory hoeft uit te voeren.
$Users | Select-Object -Property Name, LastLogonDate, LastBadPasswordAttempt
Als u meerdere keren een query wilt uitvoeren op Active Directory, gebruikt u de parameter Eigenschappen om de gewenste niet-standaardeigenschappen op te geven.
Get-ADUser -Identity mike -Properties LastLogonDate, LastBadPasswordAttempt
DistinguishedName : CN=Mike F. Robbins,OU=Sales,DC=mikefrobbins,DC=com
Enabled : True
GivenName : Mike
LastBadPasswordAttempt : 2/4/2017 10:46:15 AM
LastLogonDate : 2/18/2017 12:45:14 AM
Name : Mike F. Robbins
ObjectClass : user
ObjectGUID : a82a8c58-1332-4a57-a6e2-68e0c750ea56
SamAccountName : mike
SID : S-1-5-21-2989741381-570885089-3319121794-1108
Surname : Robbins
UserPrincipalName : miker@mikefrobbins.com
Samenvatting
In dit hoofdstuk hebt u geleerd hoe u kunt bepalen welk type object een opdracht produceert, hoe u kunt bepalen welke eigenschappen en methoden beschikbaar zijn voor een opdracht en hoe u kunt werken met opdrachten die de eigenschappen beperken die standaard worden geretourneerd.
Beoordelen
- Welk type object produceert de
Get-Process
cmdlet? - Hoe bepaalt u wat de beschikbare eigenschappen zijn voor een opdracht?
- Als er een opdracht bestaat voor het verkrijgen van iets, maar niet voor het instellen van hetzelfde, wat moet u controleren?
- Hoe kunnen bepaalde opdrachten die standaard geen uitvoer produceren, worden gemaakt om uitvoer te produceren?
- Als u gaat werken met de resultaten van een opdracht die een enorme hoeveelheid uitvoer produceert, wat moet u overwegen te doen?
Aanbevolen documentatie
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor