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

时间:2015-02-22 22:16:08

标签: powershell

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

cls -no-history

这可以防止使用cls命令使历史记录混乱。目前,我只是运行clear-history -id 7来删除特定的历史记录项。

2 个答案:

答案 0 :(得分:1)

这是一个非常有趣的问题。我想我已经提出了一种方法,它实际上会为你做这件事,但你需要定义一个函数,然后将你想要的命令从历史中传递到该函数中。

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

    Process {
        $o
    }

    End {
        Clear-History
        $history | Add-History
    }
}

使用它:

cls | Skip-History
Get-Process | Skip-History

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

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

Get-Process | Skip-History | Sort-Object | Skip-History

答案 1 :(得分:0)

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

您可以使用文本编辑器执行此操作。