将字符串添加到 Windows 剪贴板而不将其添加到 PowerShell 的历史记录中?
Adding a string to the Windows clipboard without adding it to the history in PowerShell?
我正在使用 PowerShell 将敏感信息复制到 Windows 剪贴板。
自 Windows 10 比。 1809 我们有了具有历史记录功能的增强型剪贴板。我不想让我的敏感信息出现在历史记录中。
Set-Clipboard
cmdlet 没有任何有用的参数。即使在 C# 中,我似乎也没有一个简单的方法来做到这一点。
截至 2019 年 12 月,PowerShell 仍然无法天真地阻止向剪贴板历史记录添加新的剪贴板项目。
执行此操作的 API 可用于 Universal Windows Platform
(UWP)。
在 2019 年期间,Microsoft 使从 Windows 桌面应用访问 UWP 中的某些 API 变得更加容易,事实证明,从 PowerShell 也可以。
所以我写了一个 small .Net assembly,我可以在 PowerShell 中使用它来防止在将文本复制到 Windows 剪贴板时使用历史记录功能。
诀窍是使用:
Microsoft.Windows.SDK.Contracts
访问 UWP API,然后使用:
using uwp = Windows.ApplicationModel.DataTransfer;
uwp.DataPackage dataPackage = new uwp.DataPackage { RequestedOperation = uwp.DataPackageOperation.Copy };
dataPackage.SetText("text to copy");
uwp.Clipboard.SetContentWithOptions(dataPackage, new uwp.ClipboardContentOptions() { IsAllowedInHistory = false, IsRoamable = false });
uwp.Clipboard.Flush();
事实证明,您可以直接在 PowerShell 中访问 Universal Windows Platform
(UWP) API:
Function Set-ClipboardWithoutHistory([string]$Value)
{
[int]$RequestedOperationCopy = 1
$null = [Windows.ApplicationModel.DataTransfer.DataPackage,Windows.ApplicationModel.DataTransfer,ContentType=WindowsRuntime]
$null = [Windows.ApplicationModel.DataTransfer.ClipboardContentOptions,Windows.ApplicationModel.DataTransfer,ContentType=WindowsRuntime]
$null = [Windows.ApplicationModel.DataTransfer.Clipboard,Windows.ApplicationModel.DataTransfer,ContentType=WindowsRuntime]
$dataPackage = [Windows.ApplicationModel.DataTransfer.DataPackage]::new()
$cOptions = [Windows.ApplicationModel.DataTransfer.ClipboardContentOptions]::new()
$cOptions.IsAllowedInHistory = $false
$cOptions.IsRoamable = $false
$dataPackage.RequestedOperation = $RequestedOperationCopy
$dataPackage.SetText($Value)
[Windows.ApplicationModel.DataTransfer.Clipboard]::SetContentWithOptions($dataPackage, $cOptions) | Out-Null
}
我正在使用 PowerShell 将敏感信息复制到 Windows 剪贴板。
自 Windows 10 比。 1809 我们有了具有历史记录功能的增强型剪贴板。我不想让我的敏感信息出现在历史记录中。
Set-Clipboard
cmdlet 没有任何有用的参数。即使在 C# 中,我似乎也没有一个简单的方法来做到这一点。
截至 2019 年 12 月,PowerShell 仍然无法天真地阻止向剪贴板历史记录添加新的剪贴板项目。
执行此操作的 API 可用于 Universal Windows Platform
(UWP)。
在 2019 年期间,Microsoft 使从 Windows 桌面应用访问 UWP 中的某些 API 变得更加容易,事实证明,从 PowerShell 也可以。
所以我写了一个 small .Net assembly,我可以在 PowerShell 中使用它来防止在将文本复制到 Windows 剪贴板时使用历史记录功能。
诀窍是使用:
Microsoft.Windows.SDK.Contracts
访问 UWP API,然后使用:
using uwp = Windows.ApplicationModel.DataTransfer;
uwp.DataPackage dataPackage = new uwp.DataPackage { RequestedOperation = uwp.DataPackageOperation.Copy };
dataPackage.SetText("text to copy");
uwp.Clipboard.SetContentWithOptions(dataPackage, new uwp.ClipboardContentOptions() { IsAllowedInHistory = false, IsRoamable = false });
uwp.Clipboard.Flush();
事实证明,您可以直接在 PowerShell 中访问 Universal Windows Platform
(UWP) API:
Function Set-ClipboardWithoutHistory([string]$Value)
{
[int]$RequestedOperationCopy = 1
$null = [Windows.ApplicationModel.DataTransfer.DataPackage,Windows.ApplicationModel.DataTransfer,ContentType=WindowsRuntime]
$null = [Windows.ApplicationModel.DataTransfer.ClipboardContentOptions,Windows.ApplicationModel.DataTransfer,ContentType=WindowsRuntime]
$null = [Windows.ApplicationModel.DataTransfer.Clipboard,Windows.ApplicationModel.DataTransfer,ContentType=WindowsRuntime]
$dataPackage = [Windows.ApplicationModel.DataTransfer.DataPackage]::new()
$cOptions = [Windows.ApplicationModel.DataTransfer.ClipboardContentOptions]::new()
$cOptions.IsAllowedInHistory = $false
$cOptions.IsRoamable = $false
$dataPackage.RequestedOperation = $RequestedOperationCopy
$dataPackage.SetText($Value)
[Windows.ApplicationModel.DataTransfer.Clipboard]::SetContentWithOptions($dataPackage, $cOptions) | Out-Null
}