3. fejezet – objektumok, tulajdonságok és metódusok feltárásaChapter 3 - Discovering objects, properties, and methods

A számítógépek első bevezetője a Commodore 64 volt, de az első modern számítógép egy 286 12 MHz-es IBM-klón volt, 1 megabájt memóriával, 40 megabájtos merevlemezzel és egy, a Microsoft DOS 3,3-t futtató CGA figyelővel rendelkező, 5-1/4 hüvelykes hajlékonylemez-meghajtóval.My first introduction to computers was a Commodore 64, but my first modern computer was a 286 12-Mhz IBM clone with 1 megabyte of memory, a 40-megabyte hard drive, and one 5-1/4 inch floppy disk drive with a CGA monitor running Microsoft DOS 3.3.

Sok informatikai szakembereknek, például a magamnak, a parancssornak nem idegennek kell lenniük, de ha az objektumok, tulajdonságok és metódusok tárgya bekövetkezik, akkor a fényszórók kinézetében a "nem vagyok fejlesztő vagyok".Many IT Pros, like myself, are no stranger to the command line, but when the subject of objects, properties, and methods comes up, they get the deer in the headlights look and say, "I'm not a developer." Kitalálom, mi?Guess what? Nem kell fejlesztőnek lennie ahhoz, hogy sikeres legyen a PowerShell-lel.You don't have to be a developer to be successful with PowerShell. Ne legyen leragadva a terminológiában.Don't get bogged down in the terminology. Nem minden, ami ésszerűnek tűnhet, de némi gyakorlati tapasztalat után megkezdi a "villanykörte" pillanatait.Not everything may make sense initially, but after a little hands-on experience you'll start to have those "light bulb" moments. Aha!"Aha! Tehát a könyv a következővel beszélt:.So that's what the book was talking about."

Ügyeljen arra, hogy a saját számítógépén lévő példákkal több gyakorlati tapasztalatot szerezzen.Be sure to try the examples on your computer to gain some of that hands-on experience.

KövetelményekRequirements

Az Active Directory PowerShell-modulra az ebben a fejezetben bemutatott példák némelyike szükséges.The Active Directory PowerShell module is required by some of the examples shown in this chapter. A modul a Windows Távoli kiszolgálófelügyelet eszközei (RSAT) részét képezi.The module is part of the Remote Server Administration Tools (RSAT) for Windows. A Windows 1809 (vagy újabb) verziójának létrehozásakor az RSAT-eszközök Windows-szolgáltatásként települnek.For the 1809 (or higher) build of Windows, the RSAT tools are installed as a Windows feature.

  • Az RSAT-eszközök telepítésével kapcsolatos információkért lásd: [Windows Management modulok][].For information about installing the RSAT tools, see Windows Management modules.
  • A Windows régebbi verzióihoz lásd: RSAT for Windows.For older versions of Windows, see RSAT for Windows.

Tag beolvasásaGet-Member

Get-Membersegít felderíteni, hogy mely objektumok, tulajdonságok és metódusok érhetők el a parancsokhoz.Get-Member helps you discover what objects, properties, and methods are available for commands. Az objektum-alapú kimenetet előállító bármely parancs a következőre állítható be: Get-Member .Any command that produces object-based output can be piped to Get-Member. A tulajdonság egy adott elemmel kapcsolatos jellemző.A property is a characteristic about an item. Az illesztőprogram-licenc egy Eye Color nevű tulajdonsággal rendelkezik, és az adott tulajdonság leggyakoribb értékei a kék és a barna.Your drivers license has a property called eye color and the most common values for that property are blue and brown. A metódus olyan művelet, amely egy elemen hajtható végre.A method is an action that can be taken on an item. Az illesztőprogram-licenccel kapcsolatos példaként az egyik módszer a "Visszavonás", mert a gépjárművek Minisztériuma visszavonhatja az illesztőprogram-licencet.In staying with the drivers license example, one of the methods is "Revoke" because the department of motor vehicles can revoke your drivers license.

TulajdonságokProperties

A következő példában a számítógépen futó Windows időszolgáltatással kapcsolatos információkat olvasom le.In the following example, I'll retrieve information about the Windows Time service running on my computer.

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

Az állapot, a névés a DisplayName példa a tulajdonságok előző készletében látható tulajdonságokra.Status, Name, and DisplayName are examples of properties as shown in the previous set of results. Az állapot tulajdonság értéke:, a Running Name tulajdonság értéke w32time , és a DisplayName értéke Windows Time .The value for the Status property is Running, the value for the Name property is w32time, and the value for DisplayName is Windows Time.

Most ugyanezt a parancsot fogom átvenni a következőre Get-Member :Now I'll pipe that same command to 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();

Az előző példában szereplő eredmények első sora egy fontos információt tartalmaz.The first line of the results in the previous example contains one piece of very important information. A TypeName megadja, hogy milyen típusú objektumot adott vissza.TypeName tells you what type of object was returned. Ebben a példában egy System. ServiceProcess. ServiceController objektumot adott vissza.In this example, a System.ServiceProcess.ServiceController object was returned. Ezt gyakran rövidíti a TypeName részeként az utolsó időszak után. ServiceController ebben a példában.This is often abbreviated as the portion of the TypeName just after the last period; ServiceController in this example.

Ha már tudja, hogy milyen típusú objektumot hoz létre, ezeket az információkat felhasználva megkeresheti az adott típusú objektumot bemenetként elfogadó parancsokat.Once you know what type of object a command produces, you can use this information to find commands that accept that type of object as input.

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

Ezen parancsok mindegyike rendelkezik egy olyan paraméterrel, amely a folyamat, a paraméterek bemenete vagy mindkettő segítségével fogad egy ServiceController .All of those commands have a parameter that accepts a ServiceController object type by pipeline, parameter input, or both.

Figyelje meg, hogy az alapértelmezettnél több tulajdonság jelenik meg.Notice that there are more properties than are displayed by default. Habár ezek a további tulajdonságok alapértelmezés szerint nem jelennek meg, a parancs a (z Select-Object ) parancsmaghoz és a (z) tulajdonság paraméter használatával is kiválasztható a folyamatból.Although these additional properties aren't displayed by default, they can be selected from the pipeline by piping the command to the Select-Object cmdlet and using the Property parameter. A következő példa kijelöli az összes tulajdonságot a (z) és a (z) értékének kiválasztásával, Get-Service Select-Object és megadja a * helyettesítő karaktert a tulajdonság paraméter értékeként.The following example selects all of the properties by piping the results of Get-Service to Select-Object and specifying the * wildcard character as the value for the Property parameter.

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           :

Az adott tulajdonságok a tulajdonság paraméter értékének vesszővel tagolt listája alapján is kiválaszthatók.Specific properties can also be selected using a comma-separated list for the value of the Property parameter.

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

Alapértelmezés szerint a rendszer négy tulajdonságot ad vissza egy táblában, és öt vagy több értéket ad vissza egy listában.By default, four properties are returned in a table and five or more are returned in a list. Egyes parancsok egyéni formázást használnak annak felülbírálására, hogy alapértelmezés szerint hány tulajdonság jelenik meg egy táblában.Some commands use custom formatting to override how many properties are displayed by default in a table. Az Format-* alapértelmezett beállítások manuális felülbírálásához több parancsmag is használható.There are several Format-* cmdlets that can be used to manually override these defaults. A leggyakoribbak a Format-Table és a Format-List , amelyek mindegyike egy soron következő fejezetben lesz leképezve.The most common ones are Format-Table and Format-List, both of which will be covered in an upcoming chapter.

Helyettesítő karakterek is használhatók a tulajdonságok nevének megadásakor Select-Object .Wildcard characters can be used when specifying the property names with Select-Object.

Get-Service -Name w32time | Select-Object -Property Status, DisplayName, Can*
Status              : Running
DisplayName         : Windows Time
CanPauseAndContinue : False
CanShutdown         : True
CanStop             : True

Az előző példában a Can* Property paraméter egyik értékeként használták az összes olyan tulajdonságot, amely a következővel kezdődik: Can .In the previous example, Can* was used as one of the values for the Property parameter to return all the properties that start with Can. Ilyenek például a CanPauseAndContinue, a CanShutdownés a CanStop.These include CanPauseAndContinue, CanShutdown, and CanStop.

MetódusokMethods

A metódusok műveletet végezheti el.Methods are an action that can be taken. A MemberType paraméter használatával Szűkítse le az eredményeket, Get-Member hogy csak a metódusokat jelenítse meg Get-Service .Use the MemberType parameter to narrow down the results of Get-Member to only show the methods for 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 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...

Amint láthatja, számos módszer létezik.As you can see, there are many methods. A stop metódus a Windows-szolgáltatások leállítására használható.The Stop method can be used to stop a Windows service.

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

Most ellenőrizze, hogy a Windows Time szolgáltatás valóban le van-e állítva.Now to verify the Windows time service has indeed been stopped.

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

Ritkán találok magamat metódusok használatával, de az is előfordulhat, hogy tisztában kell lennie.I rarely find myself using methods, but they're something you need to be aware of. A parancsok egy adott parancs nélkül is megtalálhatók az Get-* adott elemek módosításához.There are times that you'll come across a Get-* command without a corresponding command to modify that item. Gyakran egy metódust is használhat egy olyan művelet végrehajtásához, amely módosítja azt.Often, a method can be used to perform an action that modifies it. A Get-SqlAgentJob SQLServer PowerShell-modul parancsmagja jó példa erre.The Get-SqlAgentJob cmdlet in the SqlServer PowerShell module is a good example of this. A modul SQL Server Management Studio (SMS)részeként települ.The module installs as part of SQL Server Management Studio (SMSS). Nem Set-* létezik megfelelő parancsmag, de egy metódust is használhat a feladat végrehajtásához.No corresponding Set-* cmdlet exists, but a method can be used to complete the same task.

A metódusok egy másik oka, hogy sok kezdő a pusztító változásokat feltételezve nem lehet Get-* parancsokkal elkészíteni.Another reason to be aware of methods is that many beginners assume destructive changes can't be made with Get-* commands. De valóban súlyos problémákat okozhatnak, ha nem megfelelően használják őket.But they indeed can cause serious problems if used inappropriately.

Jobb megoldás, ha egy parancsmag használatával hajtja végre a műveletet, ha van ilyen.A better option is to use a cmdlet to perform the action if one exists. Lépjen tovább, és indítsa el a Windows időszolgáltatást, ez esetben a parancsmagot használja a szolgáltatások elindításához.Go ahead and start the Windows Time service, except this time use the cmdlet for starting services.

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

Alapértelmezés szerint Start-Service a nem ad vissza olyan eredményeket, mint a kezdő metódus Get-Service .By default, Start-Service doesn't return any results just like the start method of Get-Service. A parancsmagok használatának egyik előnye azonban az, hogy a parancsmag sokszor olyan további funkciókat kínál, amelyek nem érhetők el a metódussal.But one of the benefits of using a cmdlet is that many times the cmdlet offers additional functionality that isn't available with a method. Az előző példában a rendszer a PassThru paramétert használta.In the previous example, the PassThru parameter was used. Ez olyan parancsmagot eredményez, amely általában nem készít kimenetet, így kimenetet eredményezhet.This causes a cmdlet that doesn't normally produce output, to produce output.

Legyen óvatos a parancsmag kimenetével kapcsolatos feltételezésekkel.Be careful with assumptions about the output of a cmdlet. Mindannyian tudjuk, mi történik, ha feltételezi a dolgokat.We all know what happens when you assume things. Lekérdezem a Windows 10 Lab környezet számítógépén futó PowerShell-folyamatról szóló információt.I'll retrieve information about the PowerShell process running on my Windows 10 lab environment computer.

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

Most már ugyanezt a parancsot fogom átvenni a tagságra:Now I'll pipe that same command to 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...

Figyelje meg, hogy az alapértelmezettnél több tulajdonság szerepel, mint a.Notice that there are more properties listed than are displayed by default. A megjelenített alapértelmezett tulajdonságok száma nem jelenik meg a tulajdonságok megtekintésekor a következő eredmények megjelenítésekor: Get-Member .A number of the default properties displayed don't show up as properties when viewing the results of Get-Member. Ennek az az oka, hogy a megjelenített értékek közül számos (például,,, NPM(K) PM(K) WS(K) és CPU(s) ) a számított tulajdonságok.This is because many of the displayed values, such as NPM(K), PM(K), WS(K), and CPU(s), are calculated properties. A tényleges tulajdonságok nevének meghatározásához a parancsnak a következőnek kell lennie: Get-Member .To determine the actual property names, the command must be piped to Get-Member.

Ha egy parancs nem hoz létre kimenetet, az nem állítható be a következőre: Get-Member .If a command does not produce output, it can't be piped to Get-Member. Mivel a Start-Service nem hoz létre kimenetet alapértelmezés szerint, hiba jön létre, amikor a rendszer elvégzi a adatcsatornán való átadását Get-Member .Since Start-Service doesn't produce any output by default, it generates an error when you try to pipe it to 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

A PassThru paraméter megadható a (z Start-Service ) parancsmaggal, hogy kimenetet állítson be, amely ezután hiba nélkül lesz leképezve Get-Member .The PassThru parameter can be specified with the Start-Service cmdlet make it produce output, which is then piped to Get-Member without error.

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

Ahhoz, hogy a be legyen irányítva Get-Member , a parancsnak objektum-alapú kimenetet kell létrehoznia.To be piped to Get-Member, a command must produce object-based output.

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-Hostközvetlenül a PowerShell-gazdagépre ír, de nem hoz létre objektum-alapú kimenetet a folyamat számára.Out-Host writes directly to the PowerShell host, but it doesn't produce object-based output for the pipeline. Így nem lehet a következőre csatlakozni: Get-Member .So it can't be piped to Get-Member.

Active DirectoryActive Directory

Megjegyzés

A jelen fejezet követelmények szakaszában felsorolt Távoli kiszolgálófelügyelet eszközei szükséges a szakasz végrehajtásához.The Remote Server Administration Tools listed in the requirements section of this chapter are required to complete this section. A jelen könyv bevezetésében említetteknek megfelelően a Windows 10 Lab-környezet számítógépének a labor környezeti tartomány tagjának kell lennie.Also, as mentioned in the introduction to this book, your Windows 10 lab environment computer must be a member of the lab environment domain.

A (z Get-Command ) modul paraméterrel meghatározhatja, hogy mely parancsok lettek hozzáadva a ActiveDirectory PowerShell-modul részeként a Távoli kiszolgálófelügyelet eszközeinek telepítésekor.Use Get-Command with the Module parameter to determine what commands were added as part of the ActiveDirectory PowerShell module when the remote server administration tools were installed.

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

A ActiveDirectory PowerShell-modul részeként összesen 147 parancs lett hozzáadva.A total of 147 commands were added as part of the ActiveDirectory PowerShell module. Ezen parancsok egyes parancsai alapértelmezés szerint csak a rendelkezésre álló tulajdonságok egy részét adják vissza.Some commands of these commands only return a portion of the available properties by default.

Észrevette, hogy bármi más az ebben a modulban található parancsok nevével?Did you notice anything different about the names of the commands in this module? A parancsok főnévi része AD-előtaggal rendelkezik.The noun portion of the commands has an AD prefix. Ez gyakran előfordul, hogy a legtöbb modul parancsaiban látható.This is common to see on the commands of most modules. Az előtag úgy lett kialakítva, hogy megakadályozza az elnevezési ütközések elkerülését.The prefix is designed to help prevent naming conflicts.

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;}

Még ha csak homályosan ismeri a Active Directoryt, bizonyára tudja, hogy egy felhasználói fióknak több tulajdonsága is van, mint amennyit ebben a példában mutat.Even if you're only vaguely familiar with Active Directory, you're probably aware that a user account has more properties than are shown in this example.

A Get-ADUser parancsmag egy Properties paraméterrel rendelkezik, amely a visszaadni kívánt további (nem alapértelmezett) tulajdonságok megadására szolgál.The Get-ADUser cmdlet has a Properties parameter that is used to specify the additional (non-default) properties you want to return. A helyettesítő karakter megadásakor az * összeset adja vissza.Specifying the * wildcard character returns all of them.

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

Most, hogy úgy néz ki, mint ez.Now that looks more like it.

Úgy gondolja, hogy az Active Directory felhasználói fiókok tulajdonságai alapértelmezés szerint korlátozva lesznek?Can you think of a reason why the properties of an Active Directory user account would be so limited by default? Képzelje el, hogy az üzemi Active Directory-környezet minden felhasználói fiókjához minden tulajdonságot adott vissza.Imagine if you returned every property for every user account in your production Active Directory environment. Gondoljon a teljesítmény romlására, amelyet okozhat, nemcsak a tartományvezérlők számára, hanem a hálózatra is.Think of the performance degradation that you could cause, not only to the domain controllers themselves, but also to your network. Kétségtelen, hogy az összes tulajdonságot mindenképpen kell megadnia.It's doubtful that you'll actually need every property anyway. Egy adott felhasználói fiók összes tulajdonságának visszaadása tökéletesen elfogadható, ha meg szeretné határozni, hogy milyen tulajdonságokat lehet elérni.Returning all of the properties for a single user account is perfectly acceptable when you're trying to determine what properties exist.

Nem ritka, hogy a parancs többször is futtatható a prototípus készítésekor.It's not uncommon to run a command many times when prototyping it. Ha valamilyen nagy lekérdezést fog végrehajtani, egyszer kérdezheti le és tárolhatja az eredményeket egy változóban.If you're going to perform some huge query, query it once and store the results in a variable. Ezután a változó tartalmával is dolgozhat, és nem kell ismételten felhasználnia egy költséges lekérdezést.Then work with the contents of the variable instead of repeatedly using some expensive query.

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

Az $Users előző parancs többszöri futtatása helyett használja a változó tartalmát.Use the contents of the $Users variable instead of running the previous command numerous times. Ne feledje, hogy a változó tartalma nem frissül, amikor az adott felhasználóra vonatkozó módosításokat végez Active Directoryban.Keep in mind that the contents of the variable aren't updated when changes are made to that user in Active Directory.

Az $Users Get-Member elérhető tulajdonságok felderítéséhez adatcsatornán keresztül is átadható a változó.You could pipe the $Users variable to Get-Member to discover the available properties.

$Users | Get-Member

Ezután válassza ki az egyes tulajdonságokat a csővezetékek szerint $Users Select-Object , és minden eddiginél többször kelljen lekérdezni Active Directory egyszerre.Then select the individual properties by piping $Users to Select-Object, all without ever having to query Active Directory more than one time.

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

Ha többször szeretné lekérdezni Active Directory, a Properties paraméterrel megadhatja a kívánt nem alapértelmezett tulajdonságokat.If you are going to query Active Directory more than once, use the Properties parameter to specify any non-default properties you want.

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

ÖsszefoglalásSummary

Ebben a fejezetben megtanulta, hogyan határozhatja meg, hogy milyen típusú objektumot hoz létre, hogyan határozhatja meg, hogy milyen tulajdonságokat és metódusokat lehet elérni egy parancshoz, és hogyan dolgozhat olyan parancsokkal, amelyek korlátozzák az alapértelmezés szerint visszaadott tulajdonságokat.In this chapter, you've learned how to determine what type of object a command produces, how to determine what properties and methods are available for a command, and how to work with commands that limit the properties that are returned by default.

ÁttekintésReview

  1. Milyen típusú objektumot Get-Process állít elő a parancsmag?What type of object does the Get-Process cmdlet produce?
  2. Hogyan állapítható meg, hogy milyen tulajdonságok érhetők el a parancshoz?How do you determine what the available properties are for a command?
  3. Ha egy parancs már létezik, de nem ugyanazt a dolgot szeretné beállítani?If a command exists for getting something but not for setting the same thing, what should you check for?
  4. Hogyan hozhatók létre olyan parancsok, amelyek alapértelmezés szerint nem hoznak létre kimenetet a kimenet létrehozásához?How can certain commands that don't produce output by default be made to produce output?
  5. Ha egy olyan parancs eredményével dolgozik, amely óriási mennyiségű kimenetet eredményez, mit érdemes megfontolni?If you're going to be working with the results of a command that produces an enormous amount of output, what should you consider doing?