Получение аргументов последней вызываемой команды в powershell?
Я хочу иметь возможность получить часть аргумента предыдущей команды. $^
кажется, возвращает только команду, а не args. Get-History -count 1
возвращает последнюю полную команду, включая команду и args. Я просто могу .Замените первый экземпляр, но я не уверен, что это правильно.
сценарий заключается в том, что иногда я хочу сделать что-то подобное. Предположим, что $ * - это args к последней команде:
dir sharefilesmyfile.exe
copy $* c:windowssystem32
любые идеи, как получить последние аргументы правильно?
UPDATE: закончил мой метод для этого.
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
}
теперь я могу просто сделать:
dir sharefilesmyfile.exe
copy (Get-LastArgs) c:windowssystem32
чтобы уменьшить набор текста, я сделал
set-alias $* Get-LastArgs
так что теперь я все еще должен сделать
copy ($*) c:windowssystem32
если у кого-нибудь есть идеи по улучшению этого, пожалуйста, дайте мне знать.
2 ответов
нет простого способа получить последние args таким образом без разбора самого элемента истории, и это не тривиальное дело. Причина в том, что" последние аргументы " могут быть не такими, как вы думаете, после того, как вы берете splatting, конвейеры, вложенные подвыражения, именованные и неназванные аргументы/параметры в экваторию. В powershell v2 есть анализатор, доступный для токенизации команд и выражений, но я не уверен, что вы хотите идти по этому маршруту.
ps> $psparser::Tokenize("dir foo", [ref]$null) | ? {
$_.type -eq "commandargument" } | select -last 1 -expand content
foo
для последнего аргумента (не все!) в интерактивных хостах, таких как Console и ISE, это автоматическая переменная $$
.
помогите
man about_Automatic_Variables
получает
$$
Contains the last token in the last line received by the session.
другие узлы могут или не могут реализовать эту функцию (а также $^
переменной).