答案1
使用您所说的代码是不可能的。
$File = "E:\temp\myscreenshot.bmp"
Add-Type -AssemblyName System.Windows.Forms
Add-type -AssemblyName System.Drawing
# Gather Screen resolution information
$Screen = [System.Windows.Forms.SystemInformation]::VirtualScreen
# .. monitor width in pixels..
$Width = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Width
# .. monitor height in pixels..
$Height = [System.Windows.Forms.SystemInformation]::PrimaryMonitorSize.Height
# .. Capture points
$Left = 0 # ..monitor starting left pixel..
$Top = 0 # ..monitor starting top pixel, normally zero..
穷人的调试 - 使用变量压缩来分配和屏幕输出结果在交付之前删除边缘括号
# Create bitmap using the top-left and bottom-right bounds
($bitmap = New-Object System.Drawing.Bitmap $Width, $Height)
# Create Graphics object
($graphic = [System.Drawing.Graphics]::FromImage($bitmap))
# Capture screen
($graphic.CopyFromScreen($Left, $Top, 0, 0, $bitmap.Size))
# Save to file
$bitmap.Save($File)
您会注意到,通过上述输出,没有任何物理/文件系统相关的东西可以为您提供适合您用例的任何内容。
当然,您可以按照原样使用代码,增加图像文件名,进行比较并决定删除哪个。
文件系统 cmdlet(如...获取文件哈希等),表示您正在处理序列化文件。
获取文件哈希
模块:Microsoft.PowerShell.Utility
使用指定的哈希算法计算文件的哈希值。
OP 更新
就我个人而言,我从未尝试过,也从未遇到过需要它的用例。所以,这是一个概念,但有可能,目前就我所了解的一切而言,这都是猜测。特别是在您计划用它做什么之后对其进行哈希处理和序列化。文件系统 cmdlet 的设计只适用于文件系统。
至于将内容放入缓冲区。我建议你阅读 Trevor Sullivan 的博客文章这里,其中他演示了如何在 PowerShell 中初始化字节数组。
有时您需要将新缓冲区初始化为字节数组。例如,如果您想使用 System.Random 类上的 NextBytes() 方法生成随机数据,则需要传入一个字节数组缓冲区以供该方法写入。在 PowerShell 中创建字节数组可能并不那么容易。