One of the items that my PowerShell class this past week has
noticed is that there is some TAB completion capability with Get-CIMInstance. This is true for both the –NameSpace and –ClassName parameters. To use the TAB completion, just press space
after the parameter and press TAB. The
list of Class Libraries are not loaded by default. This means that the Shell/ISE may pause for
loading when it comes to big namespaces like the default Root\CIMv2. This pause will only be for the first usage
in the current namespace.
Notice the ISE is loading after I pressed TAB.
To get a list of CIM cmdlets that support some type of TAB
completion:
Function Find-TabCompletion
{
PAram ($String)
# Set up the
search string.
$S = "*"+"$String"+"*"
Get-Command
-noun "$S" |
Select-Object
-ExpandProperty Name
|
ForEach-Object
{
$Obj
= New-Object -TypeName
psobject -Property
@{
Cmdlet = $Null
Parameters = $Null
}
$String
= $Null
$Data
= (Get-Help -Name
$_ -Full).Parameters
ForEach
($D in
$Data.parameter)
{
If
($D.Description -match "You can use tab completion to browse")
{
$String
= $String + ",
" + "$($D.Name)"
}
}
#
Write to the pipeline only if one of the
#
commands parameters has TAB completion in
# its
description.
If
($String -ne $Null)
{
$Obj.Cmdlet
= $_
$Obj.Parameters
= $String.Remove(0,1).Trim()
Write-Output
$Obj
}
}
}
Here is what it the output looks like when you look for TAB
completion being listed in the CIM cmdlets’ help files:
Find-TabCompletion -String "CIM"
Cmdlet
Parameters
------
----------
Get-CimAssociatedInstance Namespace
Get-CimClass
ClassName, Namespace
Get-CimInstance
ClassName, Namespace
Invoke-CimMethod
ClassName, Namespace
New-CimInstance
ClassName, Namespace
Register-CimIndication... ClassName, Namespace
Remove-CimInstance
Namespace
Set-CimInstance
Namespace
You will get nothing for WMI. This is just another good
reason to switch to the CIM cmdlets.
Comments