This is post 5 of 7 in this series.
Many cmdlets accept pipeline input ByValue, but only for
very specific objects. After all, do you
think it would be wise to do this?
PS C:\> Get-Process | New-Mailbox
Probably not. We are going to see if this command will work.
PS C:\> Get-Service -Name "Bits" | Stop-Service
First off, let’s get the objects TypeName that is produce by
the left hand side of the command.
PS C:\> Get-Service -Name "Bits" | GM
TypeName:
System.ServiceProcess.ServiceController
Name
MemberType Definition
---- ---------- ----------
Name
AliasProperty Name = ServiceName
RequiredServices
AliasProperty RequiredServices = ServicesDependedOn
Disposed
Event System.EventHandler
Disposed(System.Object, Syst..
We can see that the object is of type ServiceController. Next, we need to see if any parameter of Stop-Service will accept input from the
PowerShell pipeline.
PS C:\> Get-help Stop-Service -Parameter *
I shortened the list to only the parameters that meet this
criteria.
-InputObject
Specifies
ServiceController objects that represent the services to stop. Enter a
variable that contains
the objects, or type a command or expression that gets the
objects.
Required? true
Position? 1
Default value none
Accept pipeline
input? True (ByValue)
Accept wildcard
characters? false
-Name
Specifies the
service names of the services to stop. Wildcard characters are permitted.
Required? true
Position? 1
Default value none
Accept pipeline
input? true(ByValue,ByPropertyName)
Accept wildcard
characters? false
There are only two parameters where theAccept pipeline input attribute is True. Now we need to look at the object types that
each parameter will accept. Remember, we are passing a ServiceController object to this cmdlet. The –Name
parameter only accepts String objects so no go there. The –InputObject parameter does accept our ServiceController object.
That is why we are able to execute
PS C:\> Get-Service -Name "Bits" | Stop-Service
Comments