Tôi muốn có thể lấy phần đối số của lệnh trước đó. $^
dường như chỉ trả lại lệnh và không phải là args. Get-History -count 1
trả về lệnh đầy đủ cuối cùng bao gồm lệnh và args. Tôi có thể chỉ. Thay thế trường hợp đầu tiên, nhưng tôi không chắc chắn nếu nó là chính xác.Lấy các đối số của lệnh được gọi cuối cùng trong PowerShell?
Kịch bản đôi khi tôi muốn làm điều gì đó như thế này. Giả sử rằng $ * là args cho lệnh cuối cùng:
dir \\share\files\myfile.exe
copy $* c:\windows\system32
Bất kỳ ý tưởng nào làm thế nào để có được arg cuối cùng chính xác?
CẬP NHẬT: đã hoàn thành phương pháp của tôi để thực hiện việc này.
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
}
Bây giờ tôi chỉ có thể làm:
dir \\share\files\myfile.exe
copy (Get-LastArgs) c:\windows\system32
Để giảm đánh máy, tôi đã làm
set-alias $* Get-LastArgs
vì vậy bây giờ tôi vẫn phải làm
copy ($*) c:\windows\system32
nếu ai có bất kỳ ý tưởng nào để làm điều này tốt hơn, hãy cho tôi biết.
+1 câu hỏi thú vị. nếu bạn không nhận được câu trả lời thỏa đáng trong số này, hãy xem xét đề xuất tính năng như vậy trên connect.microsoft.com/powershell – x0n
với PSReadLine, Alt +. yanks đối số cuối cùng. Nếu bạn đứng trước nó với một đối số kỹ thuật số, nó yanks nó. Vì vậy, Alt + 0 Alt +. sẽ yank các đối số đầu tiên – IttayD