PowerShell Parametre Takma Adlarını Alın


Bunun bir yolu Get-Help'i kullanmaktır.

PS C:\> get-help get-process -Parameter * | where {$_.aliases} | select name,aliases

name                                              aliases
----                                              -------
ComputerName                                      Cn
FileVersionInfo                                   FV,FVI
Id                                                PID
Name                                              ProcessName

Ancak Get-Help'i kullanmanız gerekiyor. Yardım işlevini kullanırsanız çalışmaz. Komutta takma adı olmayan parametreleri filtreledim. Ayrıca Get-Command'ı Get-Help'e yönlendirebilirsiniz.

PS C:\> get-command get-process | get-help -Parameter * | where {$_.aliases} | select name,aliases

name                                              aliases
----                                              -------
ComputerName                                      Cn
FileVersionInfo                                   FV,FVI
Id                                                PID
Name                                              ProcessName

Ancak bazı nedenlerden dolayı bu her zaman işe yaramıyor. Get-Service için takma adlar var, ancak aynı komutlar onu göstermede başarısız oluyor.

PS C:\> get-help get-service -Parameter * | where {$_.aliases} | select name,aliases
PS C:\> get-command get-service | get-help -Parameter * | where {$_.aliases} | select name,aliases

Takma adlar olduğunu biliyorum çünkü Get-Command bana gösteriyor, ancak bu bilgiyi çıkarmak biraz çalışma gerektiriyor.

PS C:\> (get-command get-service).parameters.getenumerator() | foreach {$_.value} | Select Name,Alia
ses

Name                                              Aliases
----                                              -------
Name                                              {ServiceName}
ComputerName                                      {Cn}
DependentServices                                 {DS}
RequiredServices                                  {SDO, ServicesDependedOn}
DisplayName                                       {}
Include                                           {}
Exclude                                           {}
InputObject                                       {}
ErrorAction                                       {ea}
WarningAction                                     {wa}
Verbose                                           {vb}
Debug                                             {db}
ErrorVariable                                     {ev}
WarningVariable                                   {wv}
OutVariable                                       {ov}
OutBuffer                                         {ob}
PipelineVariable                                  {pv}

Ayrıca istemde doğrulayabilirim:

PS C:\> get-service wuauserv -cn $hvr2 -sdo

Status   Name               DisplayName
------   ----               -----------
Running  rpcss              Remote Procedure Call (RPC)

Görünüşe göre bilgileri her zaman Get-Command'dan alabiliyorum, Get-ParameterAlias adında bir fonksiyon yazdım.

#requires -version 3.0

Function Get-ParameterAlias {

<#
.SYNOPSIS
List command parameter aliases
.DESCRIPTION
This command will display all of the parameter aliases for a given command or 
alias. It isn't always easy to discover parameter aliases. Many are not 
documented on cmdlet help. But they can be discovered by digging into the
output from Get-Command. 

Specify a command or alias or pipe results from Get-Command to this command.

By default, common parameters such as ErrorAction, or omitted unless you 
use -IncludeCommon
.EXAMPLE
PS C:\> get-parameteralias invoke-command

Command                          Name                                       Aliases 
-------                          ----                                       ------- 
Invoke-Command                   ComputerName                               {Cn}    
Invoke-Command                   ConnectionUri                              {URI, CU}
Invoke-Command                   InDisconnectedSession                      {Disconnected}
Invoke-Command                   HideComputerName                           {HCN}         
Invoke-Command                   ScriptBlock                                {Command}
Invoke-Command                   FilePath                                   {PSPath} 
Invoke-Command                   ArgumentList                               {Args} 

.EXAMPLE
PS C:\>  get-command dir | Get-ParameterAlias

Command                         Name                                       Aliases                                   
-------                         ----                                       -------                                   
Invoke-Command                  ComputerName                               {Cn}
Invoke-Command                  ConnectionUri                              {URI, CU}
Invoke-Command                  InDisconnectedSession                      {Disconnected}
Invoke-Command                  HideComputerName                           {HCN} 
Invoke-Command                  ScriptBlock                                {Command}
Invoke-Command                  FilePath                                   {PSPath}
Invoke-Command                  ArgumentList                               {Args} 


.NOTES
Last Updated: 2/11/2014 
Version     : 0.9

Learn more:
 PowerShell in Depth: An Administrator's Guide (http://www.manning.com/jones2/)
 PowerShell Deep Dives (http://manning.com/hicks/)
 Learn PowerShell 3 in a Month of Lunches (http://manning.com/jones3/)
 Learn PowerShell Toolmaking in a Month of Lunches (http://manning.com/jones4/)


  ****************************************************************
  * DO NOT USE IN A PRODUCTION ENVIRONMENT UNTIL YOU HAVE TESTED *
  * THOROUGHLY IN A LAB ENVIRONMENT. USE AT YOUR OWN RISK.  IF   *
  * YOU DO NOT UNDERSTAND WHAT THIS SCRIPT DOES OR HOW IT WORKS, *
  * DO NOT USE IT OUTSIDE OF A SECURE, TEST SETTING.             *
  ****************************************************************
.LINK
Get-Command
.LINK
https://jdhitsolutions.com/blog/2014/02/get-powershell-parameter-aliases
.INPUTS
[String] or [System.Management.Automation.CmdletInfo] or [System.Management.Automation.AliasInfo]
.OUTPUTS
[System.Management.Automation.ParameterMetadata]
#>

[cmdletbinding()]
Param(
[Parameter(Position=0,Mandatory=$True,
HelpMessage="Enter a command or cmdlet name",
ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[ValidateNotNullorEmpty()]
[Alias("command")]
[object]$Name,
[Switch]$IncludeCommon
)

Begin {
    Write-Verbose "Starting $($MyInvocation.mycommand)"
    if ($IncludeCommon) {
        $common=$Null
    } 
    else {
    #define common parameter names. PipelineVariable was added in v4.
    $common= "Verbose","Debug","ErrorAction","WarningAction",
    "ErrorVariable","WarningVariable","OutVariable","OutBuffer",
    "Whatif","Confirm","PipelineVariable"    

    }
} #begin

Process {

Try {

    #test if piped in object is already a command info object
    if ($Name -is [System.Management.Automation.CmdletInfo]) {
      Write-Verbose "Processing a command"
      $parameters = $name.Parameters
      $commandname= $name.Name
    }
    elseif ($Name -is [System.Management.Automation.AliasInfo]) {
      Write-Verbose "Processing an alias"
      $parameters = $name.Parameters
      $commandname= $name.ResolvedCommand
    }
    else {
        #must be a string so get the command
        Write-Verbose "Getting command information for $Name"
        $command = Get-Command $Name -ErrorAction "Stop"
        $commandname= $command.Name
        $parameters = $command.parameters
    }
} #try

Catch
{
    Write-Warning "Failed to find command $Name. $($_.Exception.message)"
   
    #bail out
    Return
}

Write-Verbose "Analyzing $CommandName"
if ($parameters) {
    $parameters.GetEnumerator() | where {$_.key -notin $common} |
    foreach {
      #get parameters with aliases
      $_.value | where {$_.Aliases} | 
      Select @{Name="Command";Expression={$CommandName}},Name,Aliases
    }
 } #if parameters found  
} #process

End {
    Write-Verbose "Ending $($MyInvocation.mycommand)"
} #end
} #end function

#set an optional alias
Set-Alias -Name gpa -value Get-ParameterAlias

İşlev bir komut adı alabilir veya Get-Command'dan bir şeyler aktarabilirsiniz.

PS C:\> Get-ParameterAlias get-wmiobject

Command                           Name                             Aliases
-------                           ----                             -------
Get-WmiObject                     Class                            {ClassName}
Get-WmiObject                     ComputerName                     {Cn}
Get-WmiObject                     Namespace                        {NS}


PS C:\> get-command get-service | get-parameteralias

Command                           Name                             Aliases
-------                           ----                             -------
Get-Service                       Name                             {ServiceName}
Get-Service                       ComputerName                     {Cn}
Get-Service                       DependentServices                {DS}
Get-Service                       RequiredServices                 {SDO, ServicesDependedOn}

Get-Command'daki parametre bilgileri -ErrorAction gibi genel parametreleri içerdiğinden, -IncludeCommon parametresini kullanmadığınız sürece varsayılan olarak bunları atladım.

Artık örneğin bir modül için parametre takma adlarını keşfetmek kolaydır.

get-command -module hyper-v | get-parameteralias | out-gridview -title "Hyper-V Aliases"

Parametre takma adlarını bilmek konsolda daha verimli olmanızı sağlayabilir. Ancak unutmayın, PowerShell'i bir betiğe işlerken bu takma adlardan bazıları biraz şifreli olabileceğinden tam parametre adını kullanın.

Her zaman olduğu gibi, umarım bana ne düşündüğünüzü söylersiniz.

İlgili makaleler