Немного поиграв, я понял, что значение реестра в
HKEY_CURRENT_USER \ Software \ Microsoft \ Clipboard \ EnableClipboardHistory
Если история включена, значение устанавливается в 1, в противном случае - 0. Изменение значения вручную на 0 отключает историю, не удаляя ее.
Возвращение 1 возвращает предыдущую историю. Зная это, я написал функцию:
Function Set-ClipboardWithoutHistory([string]$Value)
{
$Path = "HKCU:\Software\Microsoft\Clipboard"
$Name = "EnableClipboardHistory"
[int]$currentValue = 0
If (Test-Path -Path "$Path")
{
$Key = Get-Item -LiteralPath $Path
if ($null -ne $Key.GetValue($Name, $null)) {
$currentValue = (Get-ItemProperty -Path $Path -Name $Name).EnableClipboardHistory
}
}
if ($currentValue -eq 1) {Set-ItemProperty -Path $Path -Name $Name -Value 0 | Out-Null}
Set-Clipboard -Value $Value
if ($currentValue -eq 1) {Set-ItemProperty -Path $Path -Name $Name -Value 1 | Out-Null}
}
Я проверяю наличие EnableClipboardHistory
со значением 1, только тогда я отключу историю, установив ее на 0, после вызова Set-Clipboard
я могу переключить ее обратно на 1.
Если значение не существует или равно 0, мне не нужно делать ничего особенного.
Предыдущая история буфера обмена все еще там, но моих данных нет.
Это может быть чем-то вроде взлома, но пока у нас не будет правильного переключателя в будущей версии PowerShell, это прекрасно работает для меня.