Tag Archives: InputObject

Where-Object

NAME
    Where-Object

SYNOPSIS
    Creates a filter that controls which objects will be passed along a command pipeline.

SYNTAX
    Where-Object [-FilterScript] <scriptblock> [-InputObject <psobject>] [<CommonParameters>]

DESCRIPTION
    The Where-Object cmdlet selects objects from the set of objects that are passed to it. It uses a script block as a filter and evaluates the script block for each object. If the result of the evaluation is True, the object is returned. If the result of the evaluation is not True, the object is ignored.

PARAMETERS
    -FilterScript <scriptblock>
        Specifies the script block that is used to filter the objects. Enclose the script block in braces ( {} ).

        Required?                    true
        Position?                    1
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -InputObject <psobject>
        Specifies the objects to be filtered. You can also pipe the objects to Where-Object.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     true (ByValue)
        Accept wildcard characters? false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        “Get-Help about_CommonParameters“.

INPUTS
    System.Management.Automation.PSObject
        You can pipe the objects to be filtered to Where-Object.

OUTPUTS

NOTES

    ————————– EXAMPLE 1 ————————–

    C:\PS>Get-Service | Where-Object {$_.Status -eq “Stopped”}

    Description
    ———–
    This command gets a list of all services that are currently stopped. The “$” symbol represents each object that is passed to the Where-Object cmdlet.

    ————————– EXAMPLE 2 ————————–

    C:\PS>Get-Process | Where-Object {$_.workingset -gt 25000*1024}

    Description
    ———–
    This command lists processes that have a working set greater than 25,000 kilobytes (KB). Because the value of the WorkingSet property is stored in bytes, the value of 25,000 is multiplied by 1,024.

    ————————– EXAMPLE 3 ————————–

    C:\PS>Get-Process | Where-Object { $_.ProcessName -match “^p.*” }

    Description
    ———–
    This command gets the processes with a ProcessName property that begins with the letter “p”. The match operator enables you to use regular expressions within a Where clause.

    ————————– EXAMPLE 4 ————————–

    C:\PS>Get-Process -name svchost | Where-Object {$True}

    Description
    ———–
    This command lists all of the processes named “svchost”.

    The Where-Object cmdlet evaluates the script block, which typically includes a reference to the object currently in the pipeline ($_), and casts the results to a Boolean type: True or False. If the result is True, the object is returned. Otherwise, it is discarded.

    In this case, the script block just returns True, so all the objects are returned.

RELATED LINKS
    Online version: http://go.microsoft.com/fwlink/?LinkID=113423

Write-Output

NAME
    Write-Output

SYNOPSIS
    Sends the specified objects to the next command in the pipeline. If the command is the last command in the pipeline, the objects are displayed in the console.

SYNTAX
    Write-Output [-InputObject] <PSObject[]> [<CommonParameters>]

DESCRIPTION
    The Write-Output cmdlet sends the specified object down the pipeline to the next command. If the command is the last command in the pipeline, the object is displayed in the console.

    Write-Output sends objects down the primary pipeline, also known as the “output stream” or the “success pipeline.” To send error objects down the error pipeline, use Write-Error.

    This cmdlet is typically used in scripts to display strings and other objects on the console. However, because the default behavior is to display the objects at the end of a pipeline, it is generally not necessary to use the cmdlet. For example, “Get-Process | Write-Output” is equivalent to “Get-Process“.

PARAMETERS
    -InputObject <PSObject[]>
        Specifies the objects to send down the pipeline. Enter a Variable that contains the objects, or type a command or expression that gets the objects.

        Required?                    true
        Position?                    1
        Default value
        Accept pipeline input?     true (ByValue)
        Accept wildcard characters? false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        “Get-Help about_CommonParameters“.

INPUTS
    System.Management.Automation.PSObject
        You can pipe objects to Write-Output.

OUTPUTS
    System.Management.Automation.PSObject
        Write-Output returns the objects that are submitted as input.

NOTES

    ————————– EXAMPLE 1 ————————–

    C:\PS>$p = Get-Process

    c:\PS> Write-Output $p

    c:\PS> $p

    Description
    ———–
    These commands get objects representing the processes running on the computer and display the objects on the console.

    ————————– EXAMPLE 2 ————————–

    C:\PS>Write-Output “test output” | Get-Member

    Description
    ———–
    This command pipes the “test output” string to the Get-Member cmdlet, which displays the members of the String class, demonstrating that the string was passed along the pipeline.

RELATED LINKS
    Online version: http://go.microsoft.com/fwlink/?LinkID=113427
    Write-Debug
    Write-Verbose
    Write-Error
    Write-Progress
    Write-Host
    Write-Warning
    Tee-Object

Tee-Object

NAME
    Tee-Object

SYNOPSIS
    Saves command output in a file or Variable, and displays it in the console.

SYNTAX
    Tee-Object [-FilePath] <string> [-InputObject <psobject>] [<CommonParameters>]

    Tee-Object -Variable <string> [-InputObject <psobject>] [<CommonParameters>]

DESCRIPTION
    The Tee-Object cmdlet sends the output of a command in two directions (like the letter “T”). It stores the output in a file or Variable and also sends it down the pipeline. If Tee-Object is the last command in the pipeline, the command output is displayed in the console.

PARAMETERS
    -FilePath <string>
        Specifies the file where the cmdlet stores the object. Accepts wildcards that resolve to a single file.

        Required?                    true
        Position?                    1
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -InputObject <psobject>
        Specifies the object input to the cmdlet. Enter a Variable that contains the objects or type a command or expression that gets the objects.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     true (ByValue)
        Accept wildcard characters? false

    -Variable <string>
        Assigns a reference to the input objects to the specified Variable.

        Required?                    true
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        “Get-Help about_CommonParameters“.

INPUTS
    System.Management.Automation.PSObject
        You can pipe objects to be redirected to Tee-Object.

OUTPUTS
    System.Management.Automation.PSObject
        Tee-Object returns the object that it redirected.

NOTES

        You can also use the Out-File cmdlet or the redirection operator, both of which save the output in a file but do not send it down the pipeline.

        Tee-Object uses Unicode encoding when it writes to files. As a result, the output might not be formatted properly in files with a different encoding. To specify the encoding, use the Out-File cmdlet.

    ————————– EXAMPLE 1 ————————–

    C:\PS>Get-Process | Tee-Object -FilePath C:\Test1\testfile2.txt

    Handles NPM(K)    PM(K)     WS(K) VM(M) CPU(s)    Id ProcessName
    ——- ——    —–     —– —– ——    — ———–
     83     4     2300     4520    39     0.30    4032 00THotkey
     272     6     1400     3944    34     0.06    3088 alg
     81     3     804     3284    21     2.45     148 ApntEx
     81     4     2008     5808    38     0.75    3684 Apoint
    …

    Description
    ———–
    This command gets a list of the processes running on the computer and sends the result to a file. Because a second path is not specified, the result will be displayed in the console.

    ————————– EXAMPLE 2 ————————–

    C:\PS>Get-Process notepad | Tee-Object -variable proc | Select-Object processname,handles

    ProcessName                             Handles
    ———–                             ——-
    notepad                                 43
    notepad                                 37
    notepad                                 38
    notepad                                 38

    Description
    ———–
    This command gets a list of the processes running on the computer and sends the result to a Variable named “proc”. It then pipes the resulting objects along to Select-Object, which selects the ProcessName and Handles property. Note that the $proc Variable includes the default information returned by Get-Process.

RELATED LINKS
    Online version: http://go.microsoft.com/fwlink/?LinkID=113417
    about_Redirection
    Select-Object

Trace-Command

NAME
    Trace-Command

SYNOPSIS
    Configures and starts a trace of the specified expression or command.

SYNTAX
    Trace-Command [-Command] <string> [-ArgumentList <Object[]>] [-Name] <string[]> [[-Option] {None | Constructor | Dispose | Finalizer | Method | Property | Delegates | Events | Exception | Lock | Error | Errors | Warning | Verbose | WriteLine | Data | Scope | ExecutionFlow | Assert | All}] [-Debugger] [-FilePath <string>] [-Force] [-InputObject <psobject>] [-ListenerOption {None | LogicalOperationStack | DateTime | Timestamp | ProcessId | ThreadId | Callstack}] [-PSHost] [<CommonParameters>]

    Trace-Command [-Expression] <scriptblock> [-Name] <string[]> [[-Option] {None | Constructor | Dispose | Finalizer | Method | Property | Delegates | Events | Exception | Lock | Error | Errors | Warning | Verbose | WriteLine | Data | Scope | ExecutionFlow | Assert | All}] [-Debugger] [-FilePath <string>] [-Force] [-InputObject <psobject>] [-ListenerOption {None | LogicalOperationStack | DateTime | Timestamp | ProcessId | ThreadId | Callstack}] [-PSHost] [<CommonParameters>]

DESCRIPTION
    The Trace-Command cmdlet configures and starts a trace of the specified expression or command. It works like Set-TraceSource, except that it applies only to the specified command.

PARAMETERS
    -ArgumentList <Object[]>
        Specifies the parameters and parameter values for the command being traced. The Alias for ArgumentList is Args. This feature is especially useful for debugging dynamic parameters.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Command <string>
        Specifies a command that is being processed during the trace.

        Required?                    true
        Position?                    2
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Debugger [<SwitchParameter>]
        Sends the trace output to the debugger. You can view the output in any user-mode or kernel mode debugger or in Visual Studio. This parameter also selects the default trace listener.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Expression <scriptblock>
        Specifies the expression that is being processed during the trace. Enclose the expression in curly braces ({}).

        Required?                    true
        Position?                    2
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -FilePath <string>
        Sends the trace output to the specified file. This parameter also selects the file trace listener.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Force [<SwitchParameter>]
        Allows the cmdlet to append trace information to a read-only file. Used with the FilePath parameter. Even using the Force parameter, the cmdlet cannot override security restrictions.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -InputObject <psobject>
        Provides input to the expression that is being processed during the trace.

        You can enter a Variable that represents the input that the expression accepts, or pass an object through the pipeline.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     true (ByValue)
        Accept wildcard characters? false

    -ListenerOption <TraceOptions>
        Adds optional data to the prefix of each trace message in the output. The valid values are None, LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, and Callstack. “None” is the default.

        To specify multiple options, separate them with commas, but with no spaces, and enclose them in quotation marks, such as “ProcessID,ThreadID”.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Name <string[]>
        Determines which Windows PowerShell components are traced. Enter the name of the trace source of each component. Wildcards are permitted. To find the trace sources on your computer, type “Get-TraceSource“.

        Required?                    true
        Position?                    1
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Option <PSTraceSourceOptions>
        Determines the type of events that are traced.

        The valid values are None, Constructor, Dispose, Finalizer, Method, Property, Delegates, Events, Exception, Lock, Error, Errors, Warning, Verbose, WriteLine, Data, Scope, ExecutionFlow, Assert, and All. “All” is the default.

        The following values are combinations of other values:

        — ExecutionFlow: (Constructor, Dispose, Finalizer, Method, Delegates, Events, and Scope)

        — Data: (Constructor, Dispose, Finalizer, Property, Verbose, and WriteLine)

        — Errors: (Error and Exception).

        To specify multiple options, separate them with commas, but with no spaces, and enclose them in quotation marks, such as “Constructor,Dispose”.

        Required?                    false
        Position?                    3
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -PSHost [<SwitchParameter>]
        Sends the trace output to the Windows PowerShell host. This parameter also selects the PSHost trace listener.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        “Get-Help about_CommonParameters“.

INPUTS
    System.Management.Automation.PSObject
        You can pipe objects that represent input to the expression to Trace-Command.

OUTPUTS
    System.Management.Automation.PSObject
        Returns the command trace in the debug stream.

NOTES

        Tracing is a method that developers use to debug and refine programs. When tracing, the program generates detailed messages about each step in its internal processing.

        The Windows PowerShell tracing cmdlets are designed to help Windows PowerShell developers, but they are available to all users. They let you monitor nearly every aspect of the Functionality of the shell.

        To find the Windows PowerShell components that are enabled for tracing, type “Get-Help Get-TraceSource.”

        A “trace source” is the part of each Windows PowerShell component that manages tracing and generates trace messages for the component. To trace a component, you identify its trace source.

        A “trace listener” receives the output of the trace and displays it to the user. You can elect to send the trace data to a user-mode or kernel-mode debugger, to the host or console, to a file, or to a custom listener derived from the System.Diagnostics.TraceListener class.

        When you use the Command parameter set, Windows PowerShell processes the command just as it would be processed in a pipeline. For example, command discovery is not repeated for each incoming object.

        The names of the Name, Expression, Option, and Command parameters are optional. If you omit the parameter names, the unnamed parameter values must appear in this order: Name, Expression, Option or Name, Command,-Option . If you include the parameter names, the parameters can appear in any order.

    ————————– EXAMPLE 1 ————————–

    C:\PS>Trace-Command -Name metadata,parameterbinding,cmdlet -Expression {Get-Process notepad} -PSHost

    Description
    ———–
    This command starts a trace of metadata processing, parameter binding, and cmdlet creation and destruction of the “Get-Process notepad” expression. It uses the Name parameter to specify the trace sources, the Expression parameter to specify the command, and the PSHost parameter to send the output to the console. Because it does not specify any tracing options or listener options, the command uses the defaults, “All” for the tracing options, and “None” for the listener options.

    ————————– EXAMPLE 2 ————————–

    C:\PS>Trace-Command -Name commandprocessor,pipelineprocessor -command Get-Alias -argumentlist “ghy” -Option executionflow -ListenerOption “timestamp,callstack” -FilePath c:\test\debug.txt

    Description
    ———–
    This command starts a trace of the command processor and pipeline processor while processing the “Get-Alias cd” command.

    It uses the Name parameter to specify the trace sources, the Command parameter to specify the command, the ArgumentList parameter to specify the parameters of the Get-Alias command, the Option parameter to specify tracing options, and the ListenerOption parameter to specify the fields in the trace message prefix. The FilePath parameter sends the output to the C:\Test\Debug.txt file.

    ————————– EXAMPLE 3 ————————–

    C:\PS>$a = “i*”

    C:\PS> Trace-Command parameterbinding {Get-Alias $input} -PSHost -InputObject $a

    Description
    ———–
    These commands trace the actions of the ParameterBinding operations of Windows PowerShell while it processes a Get-Alias expression that takes input from the pipeline.

    In Trace-Command, the InputObject parameter passes an object to the expression that is being processed during the trace.

    The first command stores the string “i*” in the $a Variable. The second command uses the Trace-Command cmdlet with the ParameterBinding trace source. The PSHost parameter sends the output to the console.

    The expression being processed is “Get-Alias $input”, where the $input Variable is associated with the InputObject parameter. The InputObject parameter passes the Variable $a to the expression. In effect, the command being processed during the trace is “Get-Alias -InputObject $a” or “$a | Get-Alias“.

RELATED LINKS
    Online version: http://go.microsoft.com/fwlink/?LinkID=113419
    Get-TraceSource
    Set-TraceSource

Update-List

NAME
    Update-List

SYNOPSIS
    Adds items to and removes items from a property value that contains a collection of objects.

SYNTAX
    Update-List [-Add <Object[]>] [-Remove <Object[]>] [[-Property] <string>] [-InputObject <psobject>] [<CommonParameters>]

    Update-List -Replace <Object[]> [[-Property] <string>] [-InputObject <psobject>] [<CommonParameters>]

DESCRIPTION
    The Update-List cmdlet adds items to and removes items from a property value of an object, and then it returns the updated object. This cmdlet is designed for properties that contain collections of objects.

    The Add and Remove parameters add individual items to and remove them from the collection. The Replace parameter replaces the entire collection.

    If you do not specify a property in the command, Update-List returns an object that describes the update instead of updating the object. You can submit the update object to cmdlets that change objects, such as Set-* cmdlets.

    This cmdlet works only when the property that is being updated supports the IList interface that Update-List uses. Also, any Set-* cmdlets that accept an update must support the IList interface. The core cmdlets that are installed with Windows PowerShell do not support this interface. To determine whether a cmdlet supports Update-List, see the cmdlet Help topic.

PARAMETERS
    -Add <Object[]>
        Specifies the property values to be added to the collection. Enter the values in the order that they should appear in the collection.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -InputObject <psobject>
        Specifies the objects to be updated. You can also pipe the object to be updated to Update-List.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     true (ByValue)
        Accept wildcard characters? false

    -Property <string>
        Identifies the property that contains the collection that is being updated. If you omit this parameter, Update-List returns an object that represents the change instead of changing the object.

        Required?                    false
        Position?                    1
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Remove <Object[]>
        Specifies the property values to be removed from the collection.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Replace <Object[]>
        Specifies a new collection. This parameter replaces all items in the original collection with the items specified by this parameter.

        Required?                    true
        Position?                    named
        Default value                None
        Accept pipeline input?     false
        Accept wildcard characters? false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        “Get-Help about_CommonParameters“.

INPUTS
    System.Management.Automation.PSObject
        You can pipe the objects to be updated to Update-List.

OUTPUTS
    Objects or System.Management.Automation.PSListModifier
        Update-List returns the updated object, or it returns an object that represents the update action.

NOTES

    ————————– EXAMPLE 1 ————————–

    C:\PS>get-mailbox | Update-List -Property Aliases -Add “A”,”B” -Remove “X”,”Y” | set-mailbox

    Description
    ———–
    This command adds A and B and removes X and Y from the Aliases property of a mailbox.

    The command uses the Get-MailBox cmdlet from Microsoft Exchange Server to get the mailbox. A pipeline operator sends the mailbox object to the Update-List cmdlet.

    The Update-List command uses the Property parameter to indicate that the Aliases property of the mailbox is being updated, and it uses the Add and Remove parameters to specify the items that are being added and removed from the collection. The Aliases property fulfills the conditions of Update-List, because it stores a collection of Microsoft .NET Framework objects that have Add and Remove methods.

    The Update-List cmdlet returns the updated mailbox, which is piped to the Set-MailBox cmdlet, which changes the mailbox.

    For more information about Get-Mailbox, see http://go.microsoft.com/fwlink/?LinkId=111536.

    ————————– EXAMPLE 2 ————————–

    C:\PS>$m = get-mailbox

    C:\PS> Update-List -InputObject $m -Property Aliases -Add “A”,”B” -Remove “X”, “Y” | set-mailbox

    Description
    ———–
    This command adds A and B to the value of the Aliases property of a mailbox and removes X and Y. This command has the same effect as the previous command, although it has a slightly different format.

    The command uses the Get-MailBox cmdlet to get the mailbox, and it saves the mailbox in the $m Variable. This command uses the InputObject parameter of Update-List to specify the mailbox. The value of InputObject is the mailbox in the $m Variable. It uses the Property parameter to specify the Aliases property and the Add and Remove parameters to specify the items being added to and removed from the value of Aliases.

    The command uses a pipeline operator (|) to send the updated mailbox object to the Set-Mailbox cmdlet, which changes the mailbox.

    ————————– EXAMPLE 3 ————————–

    C:\PS>get-mailbox | set-mailbox -alias (Update-List -Add “A”, “B” -Remove “X”,”Y”)

    Description
    ———–
    This command adds A and B to the value of the Aliases property of a mailbox and removes X and Y. This command has the same effect as the two previous commands, but it uses a different procedure to perform the task.

    Instead of updating the Aliases property of the mailbox before sending it to Set-Mailbox, this command uses Update-List to create an object that represents the change. Then it submits the change to the Alias parameter of Set-Mailbox.

    The command uses the Get-MailBox cmdlet to get the mailbox. A pipeline operator sends the mailbox object to the Set-Mailbox cmdlet, which changes mailboxes.

    The command uses the Alias parameter of Set-Mailbox to change the Aliases property of the mailbox object. The value of the Alias parameter is an Update-List command that creates an object that represents the update. The Update-List command is enclosed in parentheses to ensure that it runs before the value of the Alias parameter is evaluated. When the Set-Mailbox command completes, the mailbox is changed.

    ————————– EXAMPLE 4 ————————–

    C:\PS>Update-List -InputObject $a -Property Aliases -replace “A”, “B” | set-mailbox

    Description
    ———–
    This command uses the Replace operator of Update-List to replace the collection in the Aliases property of the object in $a with a new collection.

    This command uses the InputObject parameter which, in this case, is equivalent to using a pipeline operator to pass $a to Update-List.

RELATED LINKS
    Online version: http://go.microsoft.com/fwlink/?LinkID=113447
    Select-Object

Sort-Object

NAME
    Sort-Object

SYNOPSIS
    Sorts objects by property values.

SYNTAX
    Sort-Object [[-Property] <Object[]>] [-CaseSensitive] [-Culture <string>] [-Descending] [-InputObject <psobject>] [-Unique] [<CommonParameters>]

DESCRIPTION
    The Sort-Object cmdlet sorts objects in ascending or descending order based on the values of properties of the object.

    You can specify a single property or multiple properties (for a multi-key sort), and you can select a case-sensitive or case-insensitive sort. You can also direct Sort-Object to display only the objects with a unique value for a particular property.

PARAMETERS
    -CaseSensitive [<SwitchParameter>]
        Indicates that the sort should be case sensitive. By default, sorting is not case sensitive.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Culture <string>
        Specifies the cultural configuration to use when sorting.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Descending [<SwitchParameter>]
        Sorts the objects in descending order. The default is ascending order.

        The Descending parameter applies to all properties. To sort by some properties in
        ascending order and others in descending order, you must specify their property values by using a hash table. For details, see the examples.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -InputObject <psobject>
        Specifies the objects to be sorted.

        When you use the InputObject parameter to submit a collection of items, Sort-Object receives one object that represents the collection. Because one object cannot be sorted, Sort-Object returns the entire collection unchanged.

        To sort objects, pipe them to Sort-Object.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     true (ByValue)
        Accept wildcard characters? false

    -Property <Object[]>
        Specifies the properties to use when sorting. Objects are sorted based on the values of these properties. Enter the names of the properties. Wildcards are permitted.

        If you specify multiple properties, the objects are first sorted by the first property. If more than one object has the same value for the first property, those objects are sorted by the second property. This process continues until there are no more specified properties or no groups of objects.

        If you do not specify properties, the cmdlet sorts based on default properties for the object type.

        The value of the Property parameter can be a new calculated property. To create a calculated, property, use a hash table. Valid keys are:

        — Expression <string> or <script block>
        — Ascending <Boolean>
        — Descending <Boolean>

        Required?                    false
        Position?                    1
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? true

    -Unique [<SwitchParameter>]
        Eliminates duplicates and returns only the unique members of the collection. You can use this parameter instead of using the Get-Unique cmdlet.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        “Get-Help about_CommonParameters“.

INPUTS
    System.Management.Automation.PSObject
        You can pipe the objects to be sorted to Sort-Object.

OUTPUTS
    System.Management.Automation.PSObject
        Sort-Object returns the sorted objects.

NOTES

        Sort-Object sorts objects based on the properties that you specify or the default sort properties for objects of that type.

        If an object does not have one of the specified properties, the property value for that object is interpreted by the cmdlet as NULL and is placed at the end of the sort order.

        When sorting objects, Sort-Object uses the Compare method for each property. If a property does not implement IComparable, the cmdlet converts the property value to a string and uses the Compare method for System.String.

        The Sort-Object cmdlet sorts objects in ascending or descending order based on the values of properties of the object.

        If you sort on a property whose value is an enumeration, Sort-Object sorts the enumeration values in numeric order; it does not sort the enumeration member names. For example, if you sort services by status, services with a status of “Stopped” appear before services with a status of “Running”, because the value of Status is a ServiceControllerStatus enumeration, in which “Stopped” has a value of 1 and “Running” has a value of 4.

    ————————– EXAMPLE 1 ————————–

    C:\PS>Get-ChildItem | Sort-Object

    Mode                LastWriteTime     Length Name
    —-                ————-     —— —-
    -a—         9/13/2005 4:24 PM         0 0
    -a—         9/6/2005 4:19 PM         12 a.csv
    -a—         9/21/2005 3:49 PM        529 a.Ps
    -a—         8/22/2005 4:14 PM         22 a.pl
    -a—         9/27/2005 10:33 AM         24 a.txt
    -a—         9/15/2005 10:31 AM        398 a.vbs
    -a—         7/21/2005 12:39 PM     37066 a.xml
    -a—         8/28/2005 11:30 PM     5412 a.xslt
    -a—        10/25/2005 1:59 PM        125 AdamTravel.txt
    -a—         7/21/2005 9:49 AM         59 add2Num.Ps
    -a—         8/29/2005 5:42 PM     7111 Add-Content.xml
    -a—         9/21/2005 12:46 PM     8771 aliens.Ps
    -a—         8/10/2005 2:10 PM        798 array.xml
    -a—         8/4/2004 5:00 AM        110 AUTORUN.INF
    -a—         9/6/2005 4:20 PM        245 b.csv
    …

    Description
    ———–
    This command sorts the subdirectories and files in the current directory. Because no properties are specified, the files and directories are sorted in ascending alphabetical order by their default sort property, Name.

    ————————– EXAMPLE 2 ————————–

    C:\PS>Get-ChildItem | Sort-Object -Property length

    Mode                LastWriteTime     Length Name
    —-                ————-     —— —-
    -a—         12/3/2006 5:35 PM         2 pref.txt
    -a—         9/6/2006 3:33 PM         15 count.txt
    -a—         7/26/2006 10:01 AM         30 filenoext
    -a—         8/18/2006 9:02 AM         52 temp.ps1
    -a—         8/18/2006 9:02 AM         52 temp.msh
    -a—         9/6/2006 3:33 PM         56 fivewords.txt
    -a—         7/26/2006 9:28 AM         80 date.csv
    -a—         7/29/2006 7:15 PM         84 test2.txt
    -a—         7/29/2006 7:15 PM         84 test.ps1

    Description
    ———–
    This command displays the files in the current directory in ascending order by file length.

    ————————– EXAMPLE 3 ————————–

    C:\PS>Get-Process | Sort-Object -Property WS | Select-Object -last 5

    Handles NPM(K)    PM(K)     WS(K) VM(M) CPU(s)     Id ProcessName
    ——- ——    —–     —– —– ——     — ———–
     1105     25    44236     18932 197    93.81 2032 iexplore
     2526     66    37668     36836 221 393.27    868 svchost
        974     19    22844     45928 371    88.39 3952 WINWORD
     1371     22    42192     61872 323    75.75 1584 INFOPATH
     2145     58    93088     70680 619 396.69 3908 OUTLOOK

    Description
    ———–
    This command displays the five processes on the computer with the greatest memory use based on the size of their working sets.

    The command uses the Get-Process cmdlet to get a list of processes. It uses a pipeline operator (|) to send the results to the Sort-Object cmdlet, which sorts the objects in working-set order.

    Another pipeline operator sends the results to the Select-Object, which displays only the last five items in the list.

    ————————– EXAMPLE 4 ————————–

    C:\PS>Get-History | Sort-Object -Descending

    Id CommandLine
    — ———–
    51 Get-History | sort -Descending
    50 Get-History | sort -Descending
    49 Get-History | sort -Descending
    48 Get-History | sort -Descending
    47 Get-History | sort -Descending
    46 Get-History | sort -Descending
    45 Get-History | sort -Descending
    44 cd $pshome
    43 Get-ChildItem | Sort-Object
    42 gci *.txt

    Description
    ———–
    This command sorts HistoryInfo objects using the Id property as the default key.

    ————————– EXAMPLE 5 ————————–

    C:\PS>C:\PS> Get-Service | Sort-Object -Property `
    @{Expression=”Status”;Descending=$true}, `
    @{Expression=”DisplayName”;Descending=$false}

    Status Name             DisplayName
    —— —-             ———–
    Running ALG                Application Layer Gateway Service
    Running Ati HotKey Poller Ati HotKey Poller
    Running wuauserv         Automatic Updates
    Running BITS             Background Intelligent Transfer Ser…
    Running Client for NFS     Client for NFS
    …
    Stopped clr_optimizatio… .NET Runtime Optimization Service v…
    Stopped Alerter            Alerter
    Stopped AppMgmt            Application Management
    Stopped aspnet_state     ASP.NET State Service
    Stopped ATI Smart         ATI Smart
    Stopped ClipSrv            ClipBook

    Description
    ———–
    This command displays the services on the computer in descending Status order and ascending DisplayName order.

    The command uses the Get-Service cmdlet to get the services on the computer. It uses a pipeline operator (|) to send services to the Sort-Object cmdlet.

    To sort one property in ascending order and another property in descending order, the command uses a hash table for the value of the Property parameter. The hash table uses an Expression key to specify the property name and an Ascending or Descending key to specify the sort order.

    The resulting display, which sorts the Status values in descending order, lists properties with a Status value of “Running” before those with a Status value of “Stopped”. When sorted in ascending order, “Stopped” appears before “Running”, because Status is an enumerated property in which the value of “Stopped” (1) is less than the value of “Running” (4).

    ————————– EXAMPLE 6 ————————–

    C:\PS>Get-ChildItem *.txt | Sort-Object -Property @{Expression={$_.LastWriteTime – $_.CreationTime}; Ascending=$false} | Format-Table LastWriteTime, CreationTime

    LastWriteTime                         CreationTime
    ————-                         ————
    2/21/2006 10:22:20 AM                 10/3/2005 4:19:40 PM
    2/27/2006 8:14:24 AM                    2/23/2006 10:41:08 PM
    2/24/2006 1:26:19 PM                    2/23/2006 11:23:36 PM
    1/5/2006 12:01:35 PM                    1/5/2006 11:35:30 AM
    2/24/2006 9:25:40 AM                    2/24/2006 9:22:24 AM
    2/24/2006 9:40:01 AM                    2/24/2006 9:39:41 AM
    2/21/2006 10:21:30 AM                 2/21/2006 10:21:30 AM

    Description
    ———–
    This command sorts text files in descending order by the time span between CreationTime and LastWriteTime.

    ————————– EXAMPLE 7 ————————–

    C:\PS>Get-Content servers.txt

    localhost
    test01
    server01
    server02
    localhost
    server01

    C:\PS> Get-Content servers.txt | Sort-Object -Unique
    localhost
    server01
    server02
    test01

    Description
    ———–
    These commands sort the names of servers in a text file. The second command uses the Sort-Object cmdlet with the Unique parameter to return a sorted list without duplicates.

RELATED LINKS
    Online version: http://go.microsoft.com/fwlink/?LinkID=113403
    Group-Object

Start-Job

NAME
    Start-Job

SYNOPSIS
    Starts a Windows PowerShell background job.

SYNTAX
    Start-Job [-ScriptBlock] <scriptblock> [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {Default | Basic | Negotiate | NegotiateWithImplicitCredential | Credssp | Digest | Kerberos}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

    Start-Job [[-FilePath] <string>] [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {Default | Basic | Negotiate | NegotiateWithImplicitCredential | Credssp | Digest | Kerberos}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]

DESCRIPTION
    The Start-Job cmdlet starts a Windows PowerShell background job on the local computer.

    A Windows PowerShell background job runs a command “in the background” without interacting with the current session. When you start a background job, a job object is returned immediately, even if the job takes an extended time to complete. You can continue to work in the session without interruption while the job runs.

    The job object contains useful information about the job, but it does not contain the job results. When the job completes, use the Receive-Job cmdlet to get the results of the job. For more information about background jobs, see about_jobs.

    To run a background job on a remote computer, use the AsJob parameter that is available on many cmdlets, or use the Invoke-Command cmdlet to run a Start-Job command on the remote computer. For more information, see about_remote_Jobs.

PARAMETERS
    -ArgumentList <Object[]>
        Specifies the arguments (parameter values) for the script that is specified by the FilePath parameter.

        Because all of the values that follow the ArgumentList parameter name are interpreted as being values of ArgumentList, the ArgumentList parameter should be the last parameter in the command.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Authentication <AuthenticationMechanism>
        Specifies the mechanism that is used to authenticate the user’s credentials. Valid values are Default, Basic, Credssp, Digest, Kerberos, Negotiate, and NegotiateWithImplicitCredential. The default value is Default.

        CredSSP authentication is available only in Windows Vista, Windows Server 2008, and later versions of Windows.

        For information about the values of this parameter, see the description of the System.Management.Automation.Runspaces.AuthenticationMechanism enumeration in MSDN.

        CAUTION: Credential Security Service Provider (CredSSP) authentication, in which the user’s credentials are passed to a remote computer to be authenticated, is designed for commands that require authentication on more than one resource, such as accessing a remote network share. This mechanism increases the security risk of the remote operation. If the remote computer is compromised, the credentials that are passed to it can be used to control the network session.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Credential <PSCredential>
        Specifies a user account that has permission to perform this action. The default is the current user.

        Type a user name, such as “User01” or “Domain01\User01”, or enter a PSCredential object, such as one from the Get-Credential cmdlet.

        Required?                    false
        Position?                    named
        Default value                Current user
        Accept pipeline input?     false
        Accept wildcard characters? false

    -FilePath <string>
        Runs the specified local script as a background job. Enter the path and file name of the script or pipe a script path to Start-Job. The script must reside on the local computer or in a directory that the local computer can access.

        When you use this parameter, Windows PowerShell converts the contents of the specified script file to a script block and runs the script block as a background job.

        Required?                    false
        Position?                    1
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -InitializationScript <scriptblock>
        Specifies commands that run before the job starts. Enclose the commands in braces ( { } ) to create a script block.

        Use this parameter to prepare the session in which the job runs. For example, you can use it to add Functions, snap-ins, and modules to the session.

        Required?                    false
        Position?                    2
        Default value                None
        Accept pipeline input?     false
        Accept wildcard characters? false

    -InputObject <psobject>
        Specifies input to the command. Enter a Variable that contains the objects, or type a command or expression that generates the objects.

        In the value of the ScriptBlock parameter, use the $input automatic Variable to represent the input objects.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     true (ByValue)
        Accept wildcard characters? false

    -Name <string>
        Specifies a friendly name for the new job. You can use the name to identify the job to other job cmdlets, such as Stop-Job.

        The default friendly name is Job#, where “#” is an ordinal number that is incremented for each job.

        Required?                    false
        Position?                    named
        Default value                Job<number>
        Accept pipeline input?     true (ByPropertyName)
        Accept wildcard characters? false

    -RunAs32 [<SwitchParameter>]
        Runs the job in a 32-bit process.

        Use this parameter to force the job to run in a 32-bit process on a 64-bit operating system.

        Required?                    false
        Position?                    named
        Default value                False
        Accept pipeline input?     false
        Accept wildcard characters? false

    -ScriptBlock <scriptblock>
        Specifies the commands to run in the background job. Enclose the commands in braces ( { } ) to create a script block. This parameter is required.

        Required?                    true
        Position?                    1
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        “Get-Help about_CommonParameters“.

INPUTS
    System.String
        You can pipe a file path to Start-Job.

OUTPUTS
    System.Management.Automation.RemotingJob
        Start-Job returns an object that represents the job that it started.

NOTES

        To run in the background, Start-Job runs in its own session within the current session. When you use the Invoke-Command cmdlet to run a Start-Job command in a session on a remote computer, Start-Job runs in a session within the remote session.

    ————————– EXAMPLE 1 ————————–

    C:\PS>Start-Job -ScriptBlock {Get-Process}

    C:\PS> Start-Job -command “Get-Process

    Id    Name State    HasMoreData Location Command
    — —- —–    ———– ——– ——-
    1     Job1 Running True         localhost Get-Process

    Description
    ———–
    This command starts a background job that runs a Get-Process command. The command returns a job object with information about the job. The command prompt returns immediately so that you can work in the session while the job runs in the background.

    ————————– EXAMPLE 2 ————————–

    C:\PS>$jobWRM = Invoke-Command -computerName (Get-Content servers.txt) -ScriptBlock {Get-Service winrm} -jobname WinRM -throttlelimit 16 -AsJob

    Description
    ———–
    This command uses the Invoke-Command cmdlet and its AsJob parameter to start a background job that runs a “Get-Service winrm” command on numerous computers. Because the command is running on a server with substantial network traffic, the command uses the ThrottleLimit parameter of Invoke-Command to limit the number of concurrent commands to 16.

    The command uses the ComputerName parameter to specify the computers on which the job runs. The value of the ComputerName parameter is a Get-Content command that gets the text in the Servers.txt file, a file of computer names in a domain.

    The command uses the ScriptBlock parameter to specify the command and the JobName parameter to specify a friendly name for the job.

    ————————– EXAMPLE 3 ————————–

    C:\PS>$j = Start-Job -ScriptBlock {Get-Eventlog -log system} -Credential domain01\user01

    C:\PS> $j | Format-List -property *

    HasMoreData : True
    StatusMessage :
    Location     : localhost
    Command     : Get-Eventlog -log system
    JobStateInfo : Running
    Finished     : System.Threading.ManualResetEvent
    InstanceId    : 2d9d775f-63e0-4d48-b4bc-c05d0e177f34
    Id            : 1
    Name         : Job1
    ChildJobs     : {Job2}
    Output        : {}
    Error         : {}
    Progress     : {}
    Verbose     : {}
    Debug         : {}
    Warning     : {}
    StateChanged :

    C:\PS> $j.JobStateInfo.state
    Completed

    C:\PS> $results = Receive-Job -job $j

    C:\PS> $results
    Index Time         Type        Source                EventID Message
    —– —-         —-        ——                ——- ——-
    84366 Feb 18 19:20 Information Service Control M…     7036 The description…
    84365 Feb 18 19:16 Information Service Control M…     7036 The description…
    84364 Feb 18 19:10 Information Service Control M…     7036 The description…
    …

    Description
    ———–
    These commands manage a background job that gets all of the events from the System log in Event Viewer. The job runs on the local computer.

    The first command uses the Start-Job cmdlet to start the job. It uses the Credential parameter to specify the user account of a user who has permission to run the job on the computer. Then it saves the job object that Start-Job returns in the $j Variable.

    At this point, you can resume your other work while the job completes.

    The second command uses a pipeline operator (|) to pass the job object in $j to the Format-List cmdlet. The Format-List command uses the Property parameter with a value of all (*) to display all of the properties of the job object in a list.

    The third command displays the value of the JobStateInfo property. This contains the status of the job.

    The fourth command uses the Receive-Job cmdlet to get the results of the job. It stores the results in the $results Variable.

    The final command displays the contents of the $results Variable.

    ————————– EXAMPLE 4 ————————–

    C:\PS>Start-Job -filepath c:\scripts\sample.ps1

    Description
    ———–
    This command runs the Sample.ps1 script as a background job.

    ————————– EXAMPLE 5 ————————–

    C:\PS>Start-Job -Name WinRm -ScriptBlock {Get-Process winrm}

    Description
    ———–
    This command runs a background job that gets the WinRM process on the local computer. The command uses the ScriptBlock parameter to specify the command that runs in the background job. It uses the Name parameter to specify a friendly name for the new job.

    ————————– EXAMPLE 6 ————————–

    C:\PS>Start-Job -Name GetMappingFiles -InitializationScript {Import-Module MapFunctions} -ScriptBlock {Get-Map -Name * | Set-Content D:\Maps.tif} -RunAs32

    Description
    ———–
    This command starts a job that collects a large amount of data and saves it in a .tif file. The command uses the InitializationScript parameter to run a script block that imports a required module. It also uses the RunAs32 parameter to run the job in a 32-bit process even if the computer has a 64-bit operating system.

RELATED LINKS
    Online version: http://go.microsoft.com/fwlink/?LinkID=113405
    about_jobs
    about_job_details
    about_remote_Jobs
    Get-Job
    Receive-Job
    Wait-Job
    Stop-Job
    Remove-Job
    Invoke-Command

Select-String

NAME
    Select-String

SYNOPSIS
    Finds text in strings and files.

SYNTAX
    Select-String [-Path] <string[]> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>]

    Select-String -InputObject <psobject> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>]

DESCRIPTION
    The Select-String cmdlet searches for text and text patterns in input strings and files. You can use it like Grep in UNIX and Findstr in Windows.

    Select-String is based on lines of text. By default, Select-String finds the first match in each line and, for each match, it displays the file name, line number, and all text in the line containing the match.

    However, you can direct it to detect multiple matches per line, display text before and after the match, or display only a Boolean value (true or false) that indicates whether a match is found.

    Select-String uses regular expression matching, but it can also perform a simple match that searches the input for the text that you specify.

    Select-String can display all of the text matches or stop after the first match in each input file. It can also display all text that does not match the specified pattern.

    You can also specify that Select-String should expect a particular character encoding, such as when you are searching files of Unicode text.

PARAMETERS
    -AllMatches [<SwitchParameter>]
        Searches for more than one match in each line of text. Without this parameter, Select-String finds only the first match in each line of text.

        When Select-String finds more than one match in a line of text, it still emits only one MatchInfo object for the line, but the Matches property of the object contains all of the matches.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -CaseSensitive [<SwitchParameter>]
        Makes matches case-sensitive. By default, matches are not case-sensitive.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Context <Int32[]>
        Captures the specified number of lines before and after the line with the match. This allows you to view the match in context.

        If you enter one number as the value of this parameter, that number determines the number of lines captured before and after the match. If you enter two numbers as the value, the first number determines the number of lines before the match and the second number determines the number of lines after the match.

        In the default display, lines with a match are indicated by a right angle bracket (ASCII 62) in the first column of the display. Unmarked lines are the context.

        This parameter does not change the number of objects generated by Select-String. Select-String generates one MatchInfo (Microsoft.PowerShell.Commands.MatchInfo) object for each match. The context is stored as an array of strings in the Context property of the object.

        When you pipe the output of a Select-String command to another Select-String command, the receiving command searches only the text in the matched line (the value of the Line property of the MatchInfo object), not the text in the context lines. As a result, the Context parameter is not valid on the receiving Select-String command.

        When the context includes a match, the MatchInfo object for each match includes all of the context lines, but the overlapping lines appear only once in the display.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Encoding <string>
        Specifies the character encoding that Select-String should assume when searching the file. The default is UTF8.

        Valid values are “UTF7”, “UTF8”, “UTF32”, “ASCII”, “Unicode”, “BigEndianUnicode”, “Default”, and “OEM”. “Default” is the encoding of the system’s current ANSI code page. “OEM” is the current original equipment manufacturer code page identifier for the operating system.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Exclude <string[]>
        Exclude the specified items. The value of this parameter qualifies the Path parameter. Enter a path element or pattern, such as “*.txt”. Wildcards are permitted.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Include <string[]>
        Include only the specified items. The value of this parameter qualifies the Path parameter. Enter a path element or pattern, such as “*.txt”. Wildcards are permitted.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -InputObject <psobject>
        Specifies the text to be searched. Enter a Variable that contains the text, or type a command or expression that gets the text.

        Required?                    true
        Position?                    named
        Default value
        Accept pipeline input?     true (ByValue)
        Accept wildcard characters? false

    -List [<SwitchParameter>]
        Returns only the first match in each input file. By default, Select-String returns a MatchInfo object for each match it finds.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -NotMatch [<SwitchParameter>]
        Finds text that does not match the specified pattern.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Path <string[]>
        Specifies the path to the files to be searched. Wildcards are permitted. The default location is the local directory.

        Specify files in the directory, such as “log1.txt”, “*.doc”, or “*.*”. If you specify only a directory, the command fails.

        Required?                    true
        Position?                    2
        Default value
        Accept pipeline input?     true (ByPropertyName)
        Accept wildcard characters? false

    -Pattern <string[]>
        Specifies the text to find. Type a string or regular expression. If you type a string, use the SimpleMatch parameter.

        To learn about regular expressions, see about_regular_expressions.

        Required?                    true
        Position?                    1
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Quiet [<SwitchParameter>]
        Returns a Boolean value (true or false), instead of a MatchInfo object. The value is “true” if the pattern is found; otherwise, the value is “false”.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -SimpleMatch [<SwitchParameter>]
        Uses a simple match rather than a regular expression match. In a simple match, Select-String searches the input for the text in the Pattern parameter. It does not interpret the value of the Pattern parameter as a regular expression statement.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        “Get-Help about_CommonParameters“.

INPUTS
    System.Management.Automation.PSObject
        You can pipe any object that has a ToString method to Select-String.

OUTPUTS
    Microsoft.PowerShell.Commands.MatchInfo or System.Boolean
        By default, the output is a set of MatchInfo objects, one for each match found. If you use the Quiet parameter, the output is a Boolean value indicating whether the pattern was found.

NOTES

        Select-String is like the Grep command in UNIX and the FindStr command in Windows.

        To use Select-String, type the text that you want to find as the value of the Pattern parameter.

        To specify the text to be searched, do the following:

        — Type the text in a quoted string, and then pipe it to Select-String.
        — Store a text string in a Variable, and then specify the Variable as the value of the InputObject parameter.
        — If the text is stored in files, use the Path parameter to specify the path to the files.

        By default, Select-String interprets the value of the Pattern parameter as a regular expression. (For more information, see about_regular_expressions.) However, you can use the SimpleMatch parameter to override the regular expression matching. The SimpleMatch parameter finds instances of the value of the Pattern parameter in the input.

        The default output of Select-String is a MatchInfo object, which includes detailed information about the matches. The information in the object is useful when you are searching for text in files, because MatchInfo objects have properties such as Filename and Line. When the input is not from the file, the value of these parameters is “InputStream”.

        If you do not need the information in the MatchInfo object, use the Quiet parameter, which returns a Boolean value (true or false) to indicate whether it found a match, instead of a MatchInfo object.

        When matching phrases, Select-String uses the current that is set for the system. To find the current culture, use the Get-Culture cmdlet.

        To find the properties of a MatchInfo object, type the following:

        Select-String -path test.txt -Pattern “test” | Get-Member | Format-List -property *

    ————————– EXAMPLE 1 ————————–

    C:\PS>”Hello”,”HELLO” | Select-String -Pattern “HELLO” -CaseSensitive

    Description
    ———–
    This command performs a case-sensitive match of the text that was piped to the Select-String command.

    As a result, Select-String finds only “HELLO”, because “Hello” does not match.

    Because each of the quoted strings is treated as a line, without the CaseSensitive parameter, Select-String would recognize both of the strings as matches.

    ————————– EXAMPLE 2 ————————–

    C:\PS>Select-String -path *.xml -Pattern “the the”

    Description
    ———–
    This command searches through all files with the .xml file name extension in the current directory and displays the lines in those files that include the string “the the”.

    ————————– EXAMPLE 3 ————————–

    C:\PS>Select-String -path $pshome\en-US\*.txt -Pattern “@”

    Description
    ———–
    This command searches the Windows PowerShell conceptual Help files (about_*.txt) for information about the use of the at sign (@).

    To indicate the path, this command uses the value of the $pshome automatic Variable, which stores the path to the Windows PowerShell installation directory. In this example, the command searches the en-US subdirectory, which contains the English (US) language Help files for Windows PowerShell.

    ————————– EXAMPLE 4 ————————–

    C:\PS>function search-help
    {
        $pshelp = “$pshome\es\about_*.txt”, “$pshome\en-US\*dll-help.xml”
        Select-String -path $pshelp -Pattern $args[0]
    }

    Description
    ———–
    This simple Function uses the Select-String cmdlet to search the Windows PowerShell Help files for a particular string. In this example, the Function searches the “en-US” subdirectory for English-United States language files.

    To use the Function to find a string, such as “psdrive”, type “search-help psdrive”.

    To use this Function in any Windows PowerShell console, change the path to point to the Windows PowerShell Help files on your system, and then paste the Function in your Windows PowerShell profile.

    ————————– EXAMPLE 5 ————————–

    C:\PS>$events = Get-Eventlog -logname application -newest 100

    C:\PS> $events | Select-String -InputObject {$_.message} -Pattern “failed”

    Description
    ———–
    This example searches for the string “failed” in the 100 newest events in the Application log in Event Viewer.

    The first command uses the Get-EventLog cmdlet to get the 100 most recent events from the Application event log. Then it stores the events in the $events Variable.

    The second command uses a pipeline operator (|) to send the objects in the $events Variable to Select-String. It uses the InputObject parameter to represent the input from the $events Variable. The value of the InputObject parameter is the Message property of each object as it travels through the pipeline. The current object is represented by the $_ symbol.

    As each event arrives in the pipeline, Select-String searches the value of its Message property for the “failed” string, and then displays any lines that include a match.

    ————————– EXAMPLE 6 ————————–

    C:\PS>Get-ChildItem c:\windows\system32\* -Include *.txt -recurse |
    Select-String -Pattern “Microsoft” -CaseSensitive

    Description
    ———–
    This command examines all files in the subdirectories of C:\Windows\System32 with the .txt file name extension and searches for the string “Microsoft”. The CaseSensitive parameter indicates that the “M” in “Microsoft” must be capitalized and that the rest of the characters must be lowercase for Select-String to find a match.

    ————————– EXAMPLE 7 ————————–

    C:\PS>Select-String -path process.txt -Pattern idle, svchost -NotMatch

    Description
    ———–
    This command finds lines of text in the Process.txt file that do not include the words “idle” or “svchost”.

    ————————– EXAMPLE 8 ————————–

    C:\PS>$f = Select-String -path audit.log -Pattern “logon failed” -Context 2, 3

    C:\PS> $f.count

    C:\PS> ($f)[0].context | Format-List

    Description
    ———–
    The first command searches the Audit.Log file for the phrase “logon failed.” It uses the Context parameter to capture 2 lines before the match and 3 lines after the match.

    The second command uses the Count property of object arrays to display the number of matches found, in this case, 2.

    The third command displays the lines stored in the Context property of the first MatchInfo object. It uses array notation to indicate the first match (match 0 in a zero-based array), and it uses the Format-List cmdlet to display the value of the Context property as a list.

    The output consists of two MatchInfo objects, one for each match detected. The context lines are stored in the Context property of the MatchInfo object.

    ————————– EXAMPLE 9 ————————–

    C:\PS>$a = Get-ChildItem $pshome\en-us\about*.help.txt | Select-String -Pattern transcript

    C:\PS> $b = Get-ChildItem $pshome\en-us\about*.help.txt | Select-String -Pattern transcript -AllMatches

    C:\PS> $a
    C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39:     Start-Transcript and Stop-Transcript.

    C:\PS> $b
    C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39:     Start-Transcript and Stop-Transcript.

    C:\PS>> $a.matches
    Groups : {Transcript}
    Success : True
    Captures : {Transcript}
    Index    : 13
    Length : 10
    Value    : Transcript

    C:\PS> $b.matches
    Groups : {Transcript}
    Success : True
    Captures : {Transcript}
    Index    : 13
    Length : 10
    Value    : Transcript

    Groups : {Transcript}
    Success : True
    Captures : {Transcript}
    Index    : 33
    Length : 10
    Value    : Transcript

    Description
    ———–
    This example demonstrates the effect of the AllMatches parameter of Select-String. AllMatches finds all pattern matches in a line, instead of just finding the first match in each line.

    The first command in the example searches the Windows PowerShell conceptual Help files (“about” Help) for instances of the word “transcript”. The second command is identical, except that it uses the AllMatches parameter.

    The output of the first command is saved in the $a Variable. The output of the second command is saved in the $b Variable.

    When you display the value of the Variables, the default display is identical, as shown in the example output.

    However, the fifth and sixth commands display the value of the Matches property of each object. The Matches property of the first command contains just one match (that is, one System.Text.RegularExpressions.Match object), whereas the Matches property of the second command contains objects for both of the matches in the line.

RELATED LINKS
    Online version: http://go.microsoft.com/fwlink/?LinkID=113388
    about_Comparison_Operators
    about_regular_expressions

Select-Object

NAME
    Select-Object

SYNOPSIS
    Selects specified properties of an object or set of objects. It can also select unique objects from an array of objects, or it can select a specified number of objects from the beginning or end of an array of objects.

SYNTAX
    Select-Object [[-Property] <Object[]>] [-ExcludeProperty <string[]>] [-ExpandProperty <string>] [-First <int>] [-InputObject <psobject>] [-Last <int>] [-Skip <int>] [-Unique] [<CommonParameters>]

    Select-Object [-Index <Int32[]>] [-InputObject <psobject>] [-Unique] [<CommonParameters>]

DESCRIPTION
    The Select-Object cmdlet gets only the specified properties of an object or set of objects. It can also select unique objects from an array of objects, or it can select a specified number of objects from the beginning or end of an array of objects.

    If you use Select-Object to select specified properties, it copies the values of those properties from the input objects and creates new objects that have the specified properties and copied values.

    Use the Property parameter to specify the properties you want to select. Or, use the First, Last, Unique, Skip, and Index parameters to select particular objects from an array of input objects. For more specific object filtering, use the Where-Object cmdlet.

PARAMETERS
    -ExcludeProperty <string[]>
        Removes the specifies properties from the selection. Wildcards are permitted. This parameter is effective only when the command also includes the Property parameter.

        The value of the property parameter can be a calculated property, which is a hash table that specifies a name and calculates a value for the property display. Valid keys are:

         — Name or Label <string>
         — Expression <string> or <scriptblock>

        For more information, see the examples.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? true

    -ExpandProperty <string>
        Specifies a property to select, and indicates that an attempt should be made to expand that property. Wildcards are permitted in the property name.

        For example, if the specified property is an array, each value of the array is included in the output. If the property contains an object, the properties of that object are displayed in the output.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? true

    -First <int>
        Specifies the number of objects to select from the beginning of an array of input objects.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Index <Int32[]>
        Selects objects from an array based on their index values. Enter the indexes in a comma-separated list.

        Indexes in an array begin with 0, where 0 represents the first value and (n-1) represents the last value.

        Required?                    false
        Position?                    named
        Default value                None
        Accept pipeline input?     false
        Accept wildcard characters? false

    -InputObject <psobject>
        Specifies objects to send to the cmdlet through the pipeline. This parameter enables you to pipe objects to Select-Object.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     true (ByValue)
        Accept wildcard characters? false

    -Last <int>
        Specifies the number of objects to select from the end of an array of input objects.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Property <Object[]>
        Specifies the properties to select. Wildcards are permitted.

        The value of the Property parameter can be a new calculated property. To create a calculated, property, use a hash table. Valid keys are:
        — Name (or Label) <string>
        — Expression <string> or <script block>

        Required?                    false
        Position?                    1
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? true

    -Skip <int>
        Skips (does not select) the specified number of items. By default, the Skip parameter counts from the beginning of the array or list of objects, but if the command uses the Last parameter, it counts from the end of the list or array.

        Unlike the Index parameter, which starts counting from 0, the Skip parameter begins at 1.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Unique [<SwitchParameter>]
        Specifies that if a subset of the input objects has identical properties and values, only a single member of the subset will be selected.

        Required?                    false
        Position?                    named
        Default value
        Accept pipeline input?     false
        Accept wildcard characters? false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        “Get-Help about_CommonParameters“.

INPUTS
    System.Management.Automation.PSObject
        You can pipe any object to Select-Object.

OUTPUTS
    System.Management.Automation.PSObject

NOTES

        You can also refer to Select-Object by its built-in Alias, “select”. For more information, see about_aliases.

    ————————– EXAMPLE 1 ————————–

    C:\PS>Get-Process | Select-Object ProcessName,Id,WS

    Description
    ———–
    This command displays a list of processes. Only the name, ID, and working set (WS) properties of the processes are displayed.

    ————————– EXAMPLE 2 ————————–

    C:\PS>Get-Process | Select-Object processname -ExpandProperty modules |
    Format-List

    ProcessName     : 00THotkey
    Size             : 256
    Company         : TOSHIBA Corporation
    FileVersion     : 1, 0, 0, 27
    ProductVersion    : 6, 2, 0, 0
    Description     : THotkey
    Product         : TOSHIBA THotkey
    ModuleName        : 00THotkey.exe
    FileName         : C:\WINDOWS\system32\00THotkey.exe
    BaseAddress     : 4194304

    Description
    ———–
    This command displays information about the modules used by the processes running on a computer. It uses the ExpandProperty parameter to display the details contained within the modules property.

    ————————– EXAMPLE 3 ————————–

    C:\PS>Get-Process | Sort-Object -Property WS | Select-Object -Last 5

    Handles NPM(K)    PM(K)     WS(K) VS(M) CPU(s)     Id ProcessName
    ——- ——    —–     —– —– ——     — ———–
     2866     320    33432     45764 203 222.41 1292 svchost
        577     17    23676     50516 265    50.58 4388 WINWORD
        826     11    75448     76712 188    19.77 3780 Ps
     1367     14    73152     88736 216    61.69    676 Ps
     1612     44    66080     92780 380 900.59 6132 INFOPATH

    Description
    ———–
    This command displays the five processes that are using the most memory. The Sort-Object cmdlet is used to sort the processes according to memory (working set) usage, and the Select-Object cmdlet is used to select only the last five members of the resulting array of objects.

    ————————– EXAMPLE 4 ————————–

    C:\PS>Get-Process | Select-Object -Property ProcessName,@{Name=”Start Day”; Expression = {$_.StartTime.DayOfWeek}}

    ProcessName StartDay
    —-         ——–
    alg         Wednesday
    ati2evxx     Wednesday
    ati2evxx     Thursday
    …

    Description
    ———–
    This command displays the name and start day of the processes running on a computer.

    The values of the Property parameter are ProcessName and a calculated property named “Start Day.” The “Start Day” property is added by using a hash table with Name and Expression keys.

    ————————– EXAMPLE 5 ————————–

    C:\PS>”a”,”b”,”c”,”a”,”a”,”a” | Select-Object -Unique

    a
    b
    c

    Description
    ———–
    This command displays unique characters from an array of characters.

    ————————– EXAMPLE 6 ————————–

    C:\PS>$a = Get-Eventlog -log “Windows PowerShell”

    C:\PS> $a | Select-Object -index 0, ($a.count – 1)

    Description
    ———–
    These commands get the first (newest) and last (oldest) events in the Windows Powershell event log.

    The first command uses the Get-EventLog cmdlet to get all events in the Windows Powershell log. It saves the events in the $a Variable.

    The second command uses a pipeline operator (|) to send the events in $a to the Select-Object cmdlet. The Select-Object command uses the Index parameter to select items by their index number. The index for the first event is 0. The index for the last event is the number of items in $a minus 1.

    ————————– EXAMPLE 7 ————————–

    C:\PS>New-PSSession -computername (Get-Content servers.txt | Select-Object -Skip 1)

    Description
    ———–
    This command creates a new PSSession on each of the computers listed in the Servers.txt files, except for the first one.

    This command uses the Select-Object cmdlet to select all but the first computer in a list of computer names. The resulting list of computers is set as the value of the ComputerName parameter of the New-PSSession cmdlet.

RELATED LINKS
    Online version: http://go.microsoft.com/fwlink/?LinkID=113387
    Where-Object
    Group-Object
    Sort-Object

Register-ObjectEvent

NAME
    Register-ObjectEvent

SYNOPSIS
    Subscribes to the events that are generated by a Microsoft .NET Framework object.

SYNTAX
    Register-ObjectEvent [-InputObject] <psobject> [-EventName] <string> [[-SourceIdentifier] <string>] [[-Action] <scriptblock>] [-Forward] [-MessageData <psobject>] [-SupportEvent] [<CommonParameters>]

DESCRIPTION
    The Register-ObjectEvent cmdlet subscribes to events that are generated by .NET Framework objects on the local computer or on a remote computer.

    When the subscribed event is raised, it is added to the event queue in your session. To get events in the event queue, use the Get-Event cmdlet.

    You can use the parameters of Register-ObjectEvent to specify property values of the events that can help you to identify the event in the queue. You can also use the Action parameter to specify actions to take when a subscribed event is raised and the Forward parameter to send remote events to the event queue in the local session.

    When you subscribe to an event, an event subcriber is added to your session. To get the event subscribers in the session, use the Get-EventSubscriber cmdlet. To cancel the subscription, use the Unregister-Event cmdlet, which deletes the event subscriber from the session.

PARAMETERS
    -Action <scriptblock>
        Specifies commands to handle the events. The commands in the Action run when an event is raised, instead of sending the event to the event queue. Enclose the commands in braces ( { } ) to create a script block.

        The value of the Action parameter can include the $Event, $EventSubscriber, $Sender, $SourceEventArgs, and $SourceArgs automatic Variables, which provide information about the event to the Action script block. For more information, see about_Automatic_Variables.

        When you specify an action, Register-ObjectEvent returns an event job object that represents that action. You can use the Job cmdlets to manage the event job.

        Required?                    false
        Position?                    102
        Default value                None.
        Accept pipeline input?     false
        Accept wildcard characters? false

    -EventName <string>
        Specifies the event to which you are subscribing. Enter the event name. This parameter is required.

        The value of this parameter is not a name that you select for the event subscription. It is the name of an event that the .NET Framework object exposes. For example, the ManagementEventWatcher class has events named “EventArrived” and “Stopped.” To find the event name of an event, use the Get-Member cmdlet.

        Required?                    true
        Position?                    2
        Default value                None
        Accept pipeline input?     false
        Accept wildcard characters? false

    -Forward [<SwitchParameter>]
        Sends events for this subscription to a remote session. Use this parameter when you are registering for events on a remote computer or in a remote session.

        Required?                    false
        Position?                    named
        Default value                False
        Accept pipeline input?     false
        Accept wildcard characters? false

    -InputObject <psobject>
        Specifies the .NET Framework object that generates the events. Enter a Variable that contains the object, or type a command or expression that gets the object. This parameter is required.

        Required?                    true
        Position?                    1
        Default value                None
        Accept pipeline input?     false
        Accept wildcard characters? false

    -MessageData <psobject>
        Specifies any additional data to be associated with this event subscription. The value of this parameter appears in the MessageData property of all events associated with this subscription.

        Required?                    false
        Position?                    named
        Default value                None
        Accept pipeline input?     false
        Accept wildcard characters? false

    -SourceIdentifier <string>
        Specifies a name that you select for the subscription. The name that you select must be unique in the current session. The default value is the GUID that Windows PowerShell assigns.

        The value of this parameter appears in the value of the SourceIdentifier property of the subcriber object and of all event objects associated with this subscription.

        Required?                    false
        Position?                    101
        Default value                GUID
        Accept pipeline input?     false
        Accept wildcard characters? false

    -SupportEvent [<SwitchParameter>]
        Hides the event subscription. Use this parameter when the current subscription is part of a more complex event registration mechanism and it should not be discovered independently.

        To view or cancel a subscription that was created with the SupportEvent parameter, use the Force parameter of the Get-EventSubscriber and Unregister-Event cmdlets.

        Required?                    false
        Position?                    named
        Default value                False
        Accept pipeline input?     false
        Accept wildcard characters? false

    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        “Get-Help about_CommonParameters“.

INPUTS
    None
        You cannot pipe objects to Register-ObjectEvent.

OUTPUTS
    None
        This cmdlet does not generate any output.

NOTES

        Events, event subscriptions, and the event queue exist only in the current session. If you close the current session, the event queue is discarded and the event subscription is canceled.

    ————————– EXAMPLE 1 ————————–

    C:\PS>$query = New-Object System.Management.WqlEventQuery “__InstanceCreationEvent”, (New-Object TimeSpan 0,0,1), “TargetInstance isa ‘Win32_Process'”

    C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query

    C:\PS> Register-ObjectEvent -InputObject $processWatcher -EventName “EventArrived”

    Description
    ———–
    This example subscribes to events generated when a new process starts.

    The command uses the ManagementEventWatcher object to get EventArrived events. A query object specifies that the events are instance creation events for the Win32_Process class.

    ————————– EXAMPLE 2 ————————–

    C:\PS>$query = New-Object System.Management.WqlEventQuery “__InstanceCreationEvent”, (New-Object TimeSpan 0,0,1), “TargetInstance isa ‘Win32_Process'”

    C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query

    C:\PS> $action = { New-Event “PowerShell.ProcessCreated” -Sender $sender -EventArguments $SourceEventArgs.NewEvent.TargetInstance }

    C:\PS> Register-ObjectEvent -InputObject $processWatcher -EventName “EventArrived” -Action $action

    Id    Name            State     HasMoreData     Location             Command
    —    —-            —–     ———–     ——–             ——-
    2     422cfe5a-65e… Running    True                                 New-Event “PowerShe…

    Description
    ———–
    This example shows how to specify an action to respond to an event. When you specify an action, events that are raised are not added to the event queue. Instead, the action responds to the event.

    In this example, when an instance creation event is raised indicating that a new process is started, a new ProcessCreated event is raised.

    The action uses the $Sender and $SourceEventArgs automatic Variables which are populated only for event actions.

    The Register-ObjectEvent command returns a job object that represents the action, which runs as a background job. You can use the Job cmdlets, such as Get-Job and Receive-Job, to manage the background job.

    For more information, see about_jobs.

    ————————– EXAMPLE 3 ————————–

    C:\PS>$s = New-PSSession -computername Server01, Server02

    C:\PS> Invoke-Command -session $s -filepath ProcessCreationEvent.ps1

    C:\PS> Invoke-Command -session $s { Get-Event }

    # ProcessCreationEvent.ps1

    Function Enable-ProcessCreationEvent
    {
     $query = New-Object System.Management.WqlEventQuery “__InstanceCreationEvent”, `
         (New-Object TimeSpan 0,0,1), `
         “TargetInstance isa ‘Win32_Process'”
     $processWatcher = New-Object System.Management.ManagementEventWatcher $query

     $identifier = “WMI.ProcessCreated”
     Register-ObjectEvent -input $processWatcher -EventName “EventArrived” `
         -SourceIdentifier $identifier -MessageData “Test” -Forward
     }
    }

    EnableProcessCreationEvent

    Description
    ———–
    This example shows how to subscribe to object events on remote computers.

    The first command creates PSSessions on two remote computers and saves them in the $s Variable.

    The second command uses the FilePath parameter of the Invoke-Command cmdlet to run the ProcessCreationEvent.ps1 script in the each of the PSSessions in $s.

    The script includes a Register-ObjectEvent command that subscribes to instance creation events on the Win32_Process object through the ManagementEventWatcher object and its EventArrived event.

    ————————– EXAMPLE 4 ————————–

    C:\PS>$timer = New-Object Timers.Timer

    C:\PS> $timer.Interval = 500

    C:\PS> $job = Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Timer.Random -Action {$random = Get-Random -Min 0 -Max 100}

    C:\PS> $job.gettype().fullname
    System.Management.Automation.PSEventJob

    C:\PS> $job | Format-List -property *

    State         : Running
    Module        : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
    StatusMessage :
    HasMoreData : True
    Location     :
    Command     : $random = Get-Random -Min 0 -Max 100
    JobStateInfo : Running
    Finished     : System.Threading.ManualResetEvent
    InstanceId    : 88944290-133d-4b44-8752-f901bd8012e2
    Id            : 1
    Name         : Timer.Random
    ChildJobs     : {}
    …

    C:\PS> $timer.Enabled = $true

    C:\PS> & $job.module {$random}
    60

    C:\PS> & $job.module {$random}
    47

    Description
    ———–
    This example shows how to use the dynamic module in the PSEventJob object that is created when you include an Action in a event registration.

    The first command uses the New-Object cmdlet to create a timer object. The second command sets the interval of the timer to 500 (milliseconds).

    The third command uses the Register-ObjectEvent cmdlet to register the Elapsed event of the timer object. The command includes an action that handles the event. Whenever the timer interval elapses, an event is raised and the commands in the action run. In this case, the Get-Random cmdlet generates a random number between 0 and 100 and saves it in the $random Variable.

    When you use an Action parameter in a Register-ObjectEvent command, the command returns a PSEventJob object that represents the action. The command saves the job object in the $job Variable.

    The PSEventJob object that the Register-ObjectEvent cmdlet returns is also available in the Action property of the event subscriber. For more information, see Get-EventSubscriber.

    The fourth command shows that the $job Variable contains a PSEventJob object. The fifth command uses the Format-List cmdlet to display all of the properties of the PSEventJob object in a list.

    The PSEventJob has a Module property that contains a dynamic script module that implements the action.

    The sixth command enables the timer.

    The remaining commands use the call operator (&) to invoke the command in the module and display the value of the $random Variable. You can use the call operator to invoke any command in a module, including commands that are not exported. In this case, the commands show the random number that is being generated when the Elapsed event occurs.

    For more information about modules, see about_modules.

RELATED LINKS
    Online version: http://go.microsoft.com/fwlink/?LinkID=135244
    Register-EngineEvent
    Register-WmiEvent
    Unregister-Event
    Get-Event
    New-Event
    Remove-Event
    Wait-Event