运行命令而不将其添加到历史记录中

Sha*_*tin 5 powershell

我正在尝试为特定任务创建干净的命令历史记录。因此,我想具体说明哪些命令要保留在历史记录中,哪些命令不要保留。例如,为了防止命令进入历史记录,我希望能够运行如下内容:

cls -no-history
Run Code Online (Sandbox Code Playgroud)

这将防止用cls命令弄乱历史记录。目前,我只是在运行clear-history -id 7,例如,删除特定的历史记录项目。

cre*_*ion 6

注意,从 Windows 10 开始,您还需要从 %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt 中删除所有新条目,否则它仍会出现在以前的“向上箭头”列表中命令。

您可以使用文本编辑器来完成此操作。


bri*_*ist 2

这是一个非常有趣的问题。我想我已经想出了一种实际上可以为您完成此操作的方法,但是您需要定义一个函数,然后将您想要的命令从历史记录中通过管道传输到该函数中。

function Skip-History {
[CmdletBinding()]
param(
    [Parameter(
        ValueFromPipeline=$true
    )]
    [Object]
    $o
)
    Begin {
        $history = Get-History
    }

    Process {
        $o
    }

    End {
        Clear-History
        $history | Add-History
    }
}
Run Code Online (Sandbox Code Playgroud)

使用方法:

cls | Skip-History
Get-Process | Skip-History
Run Code Online (Sandbox Code Playgroud)

这样做的一个缺点是,如果重要的话,它会不断地对您的历史 ID 进行重新编号。

另外,通过进一步的实验,除非您在管道中的每个 cmdlet 之后直接使用它,否则这似乎不起作用。因此,如果你想隐藏,Get-Process | Sort-Object你必须这样调用它:

Get-Process | Skip-History | Sort-Object | Skip-History
Run Code Online (Sandbox Code Playgroud)