获取powershell中最后一个被调用命令的参数?

esa*_*sac 10 powershell

我希望能够获得上一个命令的参数部分.$^似乎只返回命令而不是args.Get-History -count 1返回包含命令和args的最后一个完整命令.我可以.更换第一个实例,但我不确定它是否正确.

情景是有时我想做这样的事情.我们假设$*是最后一个命令的参数:

dir \\share\files\myfile.exe
copy $* c:\windows\system32
Run Code Online (Sandbox Code Playgroud)

任何想法如何正确获得最后的args?

更新:完成了我的方法.

function Get-LastArgs
{
    $lastHistory = (Get-History -count 1)
    $lastCommand = $lastHistory.CommandLine   
    $errors = [System.Management.Automation.PSParseError[]] @()

    [System.Management.Automation.PsParser]::Tokenize($lastCommand, [ref] $errors) | ? {$_.type -eq "commandargument"} | select -last 1 -expand content    
 }
Run Code Online (Sandbox Code Playgroud)

现在我可以这样做:

dir \\share\files\myfile.exe
copy (Get-LastArgs) c:\windows\system32
Run Code Online (Sandbox Code Playgroud)

为了减少打字,我做到了

set-alias $* Get-LastArgs
Run Code Online (Sandbox Code Playgroud)

所以现在我还是要做

copy ($*) c:\windows\system32
Run Code Online (Sandbox Code Playgroud)

如果有人有任何改善这个想法的想法,请告诉我.

Rom*_*min 13

对于像Console和ISE这样的交互式主机中的最后一个参数(不是全部!),它是自动变量$$.

救命

man about_Automatic_Variables
Run Code Online (Sandbox Code Playgroud)

得到

$$
Contains the last token in the last line received by the session.
Run Code Online (Sandbox Code Playgroud)

其他主机可能会也可能不会实现此功能(以及$^变量).


x0n*_*x0n 1

在不解析历史项本身的情况下,没有简单的方法可以以这种方式获取最后一个参数,这不是一件小事。原因是,在将展开、管道、嵌套子表达式、命名和未命名的参数/参数放入等式中之后,“最后的参数”可能不是您所认为的那样。在 powershell v2 中,有一个解析器可用于标记命令和表达式,但我不确定您是否想要走这条路。

ps> $psparser::Tokenize("dir foo", [ref]$null) | ? {
    $_.type -eq "commandargument" } | select -last 1 -expand content
foo
Run Code Online (Sandbox Code Playgroud)