Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
PowerShell är ett objektorienterat skriptspråk. Den representerar data- och systemtillstånd med strukturerade objekt som härletts från .NET-klasser som definierats i .NET Framework. Genom att utnyttja .NET Framework ger PowerShell åtkomst till olika systemfunktioner, inklusive filsystem, register och WMI-klasser (Windows Management Instrumentation). PowerShell har också åtkomst till .NET Framework-klassbiblioteket, som innehåller en omfattande samling klasser som du kan använda för att utveckla robusta PowerShell-skript.
I PowerShell är varje objekt eller tillstånd en instans av ett objekt som kan utforskas och manipuleras.
Cmdleten Get-Member
är ett av de primära verktygen som tillhandahålls av PowerShell för objektidentifiering, vilket visar ett objekts egenskaper. Det här kapitlet utforskar hur PowerShell utnyttjar objekt och hur du kan identifiera och manipulera dessa objekt för att effektivisera dina skript och hantera dina system mer effektivt.
Förutsättningar
Om du vill följa de specifika exemplen i det här kapitlet kontrollerar du att din labbmiljödator är en del av din labbmiljös Active Directory-domän. Du måste också installera Active Directory PowerShell-modulen som medföljer Windows Remote Server Administration Tools (RSAT). Om du använder Windows 10 build 1809 eller senare, inklusive Windows 11, kan du installera RSAT som en Windows-funktion.
Kommentar
Active Directory stöds inte för Windows Home-utgåvor.
- Information om hur du installerar RSAT finns i Windows Management-moduler.
- Äldre versioner av Windows finns i RSAT för Windows.
Get-Member
Get-Member
ger insikter om objekt, egenskaper och metoder som är associerade med PowerShell-kommandon. Du kan skicka alla PowerShell-kommandon som genererar objektbaserade utdata till Get-Member
.
När du skickar utdata från ett kommando till Get-Member
visas strukturen för objektet som returneras av kommandot, med information om dess egenskaper och metoder.
- Egenskaper: Attributen för ett objekt.
- Metoder: De åtgärder som du kan utföra på ett objekt.
För att illustrera det här konceptet bör du betrakta ett körkort som en analogi. Liksom alla objekt har ett körkort egenskaper, till exempel ögonfärg, som vanligtvis innehåller blue
och brown
värden.
Metoderna representerar däremot åtgärder som du kan utföra på objektet. Återkalla är till exempel en metod som avdelningen för motorfordon kan utföra på ett körkort.
Egenskaper
Om du vill hämta information om Windows-tidstjänsten i systemet med hjälp av PowerShell använder du cmdleten Get-Service
.
Get-Service -Name w32time
Resultatet innehåller egenskaperna Status, Namn och DisplayName . Egenskapen Status anger att tjänsten är Running
. Värdet för egenskapen Namn är w32time
och värdet för egenskapen DisplayName är Windows Time
.
Status Name DisplayName
------ ---- -----------
Running w32time Windows Time
Ange alla tillgängliga egenskaper och metoder för Get-Service
genom att skicka den till Get-Member
.
Get-Service -Name w32time | Get-Member
Resultatet visar att den första raden innehåller en viktig information. TypeName identifierar vilken typ av objekt som returneras, vilket i det här exemplet är ett System.ServiceProcess.ServiceController-objekt . Det här namnet förkortas ofta till den sista delen av TypeName, till exempel ServiceController, i det här exemplet.
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();
Observera att när du dirigerade Get-Service
till Get-Member
finns det fler egenskaper än vad som visas som standard. Även om dessa ytterligare egenskaper inte visas som standard kan du välja dem genom att skicka dem till Select-Object
och använda parametern Egenskap . I följande exempel markeras alla egenskaper genom att resultatet skickas Get-Service
till Select-Object
och jokertecknet anges *
som värde för parametern Egenskap .
Get-Service -Name w32time | Select-Object -Property *
Som standard returnerar PowerShell fyra egenskaper som en tabell och fem eller fler som en lista. Vissa kommandon använder dock anpassad formatering för att åsidosätta standardantalet egenskaper som visas i en tabell.
Du kan använda Format-Table
och Format-List
åsidosätta dessa standardvärden manuellt.
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 :
Specifika egenskaper kan också väljas med hjälp av en kommaavgränsad lista som värdet för egenskapsparametern.
Get-Service -Name w32time |
Select-Object -Property Status, Name, DisplayName, ServiceType
Status Name DisplayName ServiceType
------ ---- ----------- -----------
Running w32time Windows Time Win32OwnProcess, Win32ShareProcess
Du kan använda jokertecken när du anger egenskapsnamn med Select-Object
.
I följande exempel använder du Can*
som ett av värdena för egenskapsparametern för att returnera alla egenskaper som börjar med Can
. Dessa inkluderar CanPauseAndContinue, CanShutdown och CanStop.
Get-Service -Name w32time |
Select-Object -Property Status, DisplayName, Can*
Observera att det finns fler egenskaper som visas som standard.
Status : Running
DisplayName : Windows Time
CanPauseAndContinue : False
CanShutdown : True
CanStop : True
Metoder
Metoder är åtgärder som du kan utföra på ett objekt. Använd parametern MemberType för att begränsa resultatet för Get-Member
för att endast visa metoderna för Get-Service
.
Get-Service -Name w32time | Get-Member -MemberType Method
Som du ser finns det flera metoder.
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...
Du kan använda metoden Stoppa för att stoppa en Windows-tjänst. Du måste köra det här kommandot från en upphöjd PowerShell-session.
(Get-Service -Name w32time).Stop()
Fråga status för Windows-tidstjänsten för att bekräfta att den har stoppats.
Get-Service -Name w32time
Status Name DisplayName
------ ---- -----------
Stopped w32time Windows Time
Du kanske använder metoder sparsamt, men du bör vara medveten om dem. Ibland hittar Get-*
du kommandon utan motsvarande Set-*
kommando. Ofta kan du hitta en metod för att utföra en Set-*
åtgärd i det här scenariot. Cmdleten Get-SqlAgentJob
i SqlServer PowerShell-modulen är ett utmärkt exempel. Det finns ingen motsvarande Set-*
cmdlet, men du kan använda en metod för att slutföra samma uppgift. Mer information om SqlServer PowerShell-modulen och installationsinstruktionerna finns i översikten över SQL Server PowerShell.
En annan anledning att vara medveten om metoder är att vissa PowerShell-användare antar att du inte kan göra destruktiva ändringar med Get-*
kommandon, men de kan faktiskt orsaka allvarliga problem om de missbrukas.
Ett bättre alternativ är att använda en dedikerad cmdlet om det finns en för att utföra en åtgärd. Använd till exempel cmdleten Start-Service
för att starta Windows-tidstjänsten.
Som standard Start-Service
returnerar , som startmetodenGet-Service
för , inga resultat.
En av fördelarna med att använda en cmdlet är dock att den ofta ger ytterligare funktioner som inte är tillgängliga med en metod.
I följande exempel använder du parametern PassThru , vilket gör att en cmdlet som vanligtvis inte producerar utdata genererar utdata.
Eftersom PowerShell inte deltar i Användaråtkomstkontroll (UAC) måste du köra kommandon som kräver utökade privilegier, till exempel Start-Service
, från en upphöjd PowerShell-session.
Get-Service -Name w32time | Start-Service -PassThru
Status Name DisplayName
------ ---- -----------
Running w32time Windows Time
Kommentar
När du arbetar med PowerShell-cmdletar är det viktigt att du undviker att göra antaganden om deras utdata.
Om du vill hämta information om PowerShell-processen som körs på din labbmiljödator använder du cmdleten 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
För att fastställa tillgängliga egenskaper, rör Get-Process
till Get-Member
.
Get-Process -Name powershell | Get-Member
När du använder Get-Process
kommandot kanske du märker att vissa egenskaper som visas som standard saknas när du visar resultatet av Get-Member
. Det här beteendet beror på att flera av de värden som visas som standard, till exempel NPM(K)
, PM(K)
, WS(K)
och CPU(s)
, är beräknade egenskaper. Du måste skicka pipe-kommandon för att Get-Member
fastställa deras faktiska egenskapsnamn.
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...
Du kan inte skicka ett kommando till Get-Member
som inte genererar utdata. Eftersom Start-Service
inte genererar utdata som standard resulterar det i ett fel när du försöker skicka det.Get-Member
Start-Service -Name w32time | Get-Member
Kommentar
För att skickas till Get-Member
måste ett kommando generera objektbaserade utdata.
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
Undvik det här felet genom att ange parametern PassThru med Start-Service
. Som tidigare nämnts orsakar tillägg av parametern PassThru en cmdlet som vanligtvis inte producerar utdata för att generera utdata.
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
är utformad för att visa utdata direkt i PowerShell-värden och producerar inte objektbaserade utdata. Därför kan du inte skicka dess utdata till Get-Member
, vilket kräver objektbaserade indata.
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
Hämta-kommando
Om du vet vilken typ av objekt ett kommando skapar kan du söka efter kommandon som accepterar den typen av objekt som indata.
Get-Command -ParameterType ServiceController
Följande kommandon accepterar ett ServiceController-objekt via pipeline- eller parameterindata.
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
Kommentar
Se till att RSAT är installerat för det här avsnittet, som du nämnde i kapitelkraven. Dessutom måste din labbmiljödator vara medlem i din labbmiljös Active Directory-domän.
Om du vill identifiera kommandon som lagts till i ActiveDirectory PowerShell-modulen när du har installerat RSAT använder Get-Command
du kombinerat med modulparametern . I följande exempel visas alla kommandon som är tillgängliga i ActiveDirectory-modulen .
Get-Command -Module ActiveDirectory
ActiveDirectory PowerShell-modulen lade till totalt 147 kommandon.
Har du observerat namngivningskonventionen för dessa kommandon? Substantiven i kommandonamnen är prefix med AD för att undvika potentiella namngivningskonflikter med kommandon i andra moduler. Det här prefixet är en vanlig metod bland PowerShell-moduler.
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
...
Som standard hämtar cmdleten Get-ADUser
en begränsad uppsättning egenskaper för användarobjekt och begränsar dess utdata till de första 1 000 användarna. Den här begränsningen är en prestandaoptimering som är utformad för att undvika att överbelasta Active Directory med överdriven datahämtning.
Get-ADUser -Identity mike | Get-Member -MemberType Properties
Även om du bara har en grundläggande förståelse för Active Directory kan du känna igen att ett användarkonto har fler egenskaper än de som visas i exemplet.
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;}
Cmdleten Get-ADUser
innehåller en egenskapsparameter för att ange ytterligare egenskaper utöver de standardvärden som du vill hämta. Om du vill returnera alla egenskaper använder du *
jokertecknet som parametervärde.
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...
Standardkonfigurationen för att hämta Active Directory-användarkontoegenskaper är avsiktligt begränsad för att undvika prestandaproblem. Om du försöker returnera varje egenskap för varje användarkonto i din Active Directory-produktionsmiljö kan det allvarligt försämra prestandan för dina domänkontrollanter och nätverk. Vanligtvis behöver du bara specifika egenskaper för vissa användare. Det är dock rimligt att returnera alla egenskaper för en enskild användare när du identifierar de tillgängliga egenskaperna.
Det är inte ovanligt att köra ett kommando flera gånger när du skapar prototyper. Om du förväntar dig att köra en resursintensiv fråga när du skapar ett kommando kan du överväga att köra den en gång och lagra resultatet i en variabel. Sedan kan du arbeta mer effektivt med variabelns innehåll än att köra en resursintensiv fråga upprepade gånger.
Följande kommando hämtar till exempel alla egenskaper för ett användarkonto och lagrar resultatet i en variabel med namnet $Users
. Arbeta med innehållet i variabeln $Users
i stället för att Get-ADUser
köra kommandot flera gånger. Kom ihåg att variabelns innehåll inte uppdateras automatiskt när en användares information ändras i Active Directory.
$Users = Get-ADUser -Identity mike -Properties *
Du kan utforska de tillgängliga egenskaperna genom att skicka variabeln $Users
till Get-Member
.
$Users | Get-Member -MemberType Properties
Om du vill visa specifika egenskaper som Name, LastLogonDate och LastBadPasswordAttempt, skicka variabeln $Users
till Select-Object
. Den här metoden visar önskade egenskaper och deras värden baserat på innehållet i variabeln $Users
, vilket eliminerar behovet av flera frågor till Active Directory. Det är en mer resurseffektiv metod än att Get-ADUser
köra kommandot upprepade gånger.
$Users | Select-Object -Property Name, LastLogonDate, LastBadPasswordAttempt
När du frågar Active Directory filtrerar du data vid källan med hjälp av parametern Get-ADUser
för för att endast returnera de nödvändiga egenskaperna.
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
Sammanfattning
I det här kapitlet har du lärt dig hur du avgör vilken typ av objekt ett kommando skapar, vilka egenskaper och metoder som är tillgängliga för ett kommando och hur du arbetar med kommandon som begränsar de egenskaper som returneras som standard.
Granskning
- Vilken typ av objekt skapar cmdleten
Get-Process
? - Hur avgör du vilka tillgängliga egenskaper som är tillgängliga för ett kommando?
- Vad ska du kontrollera om det finns ett kommando för att hämta något men inte för att ange samma sak?
- Hur kan vissa kommandon som inte returnerar utdata som standard göras för att generera utdata?
- Vad bör du göra när du skapar prototyper för ett kommando som producerar en stor mängd utdata?
Referenser
- Get-Member
- Visa objektstrukturen (Get-Member)
- om_Objekt
- om_Egenskaper
- om_Metoder
- Ingen PowerShell-cmdlet för att starta eller stoppa något? Glöm inte att söka efter metoder på Get Cmdlets
Nästa steg
I nästa kapitel får du lära dig mer om one-liners och pipelinen.