当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 获取 PowerShell 参数别名

作者:精品下载站 日期:2024-12-14 07:41:18 浏览:11 分类:玩电脑

获取 PowerShell 参数别名


[玩转系统] 获取 PowerShell 参数别名

一种方法是使用 Get-Help。

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

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

但您需要使用“获取帮助”。如果您使用帮助功能,它将不起作用。在命令中我过滤掉了没有别名的参数。您还可以通过管道将 Get-Command 传递给 Get-Help。

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

但由于某种原因,这并不总是有效。 Get-Service 有别名,但这些相同的命令无法显示它。

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

我知道存在别名,因为 Get-Command 显示了我,尽管提取此信息需要一些工作。

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}

另外我可以根据提示进行验证:

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

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

由于看起来我总是可以从 Get-Command 获取信息,因此我编写了一个名为 Get-ParameterAlias 的函数。

#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

该函数可以采用命令名称,也可以从 Get-Command 中通过管道传输某些内容。

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 中的参数信息包括常见参数(例如 -ErrorAction),因此默认情况下我会跳过这些参数,除非您使用 -IncludeCommon 参数。

现在很容易发现模块的参数别名。

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

[玩转系统] 获取 PowerShell 参数别名

了解参数别名可以让您在控制台中更加高效。但请记住,将 PowerShell 提交给脚本时,请使用完整的参数名称,因为其中一些别名可能有点神秘。

一如既往,我希望你能让我知道你的想法。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯