答案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 中建立位元組數組可能不會立即顯而易見。