0

我一直堅持在這最後一天左右,我覺得它的東西很小,我什麼都看不到。PowerShell屏幕捕獲

總結代碼:每60秒運行一次屏幕捕獲的Powershell腳本。在Windows Server 2012上,這很好。而在Windows 7上,只有第一個屏幕截圖被採用,然後全部都是「空白」,只有空白大小的尺寸。任何想法爲什麼發生這種情況

我也嘗試刪除更大的while循環,並執行每5分鐘運行一次的計劃任務,但這又不起作用,我得到的只是一張空白的圖像。有什麼想法嗎?在Windows 7上,我使用本地管理員用戶。

我使用跨越兩個窗口7和Windows Server 2012和.NET的powershell 4 4.5

while($true){ 
[Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
function screenshot([Drawing.Rectangle]$bounds, $path) { 
    $bmp = New-Object Drawing.Bitmap $bounds.width, $bounds.height 
    $graphics = [Drawing.Graphics]::FromImage($bmp) 

    $graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size) 

    $bmp.Save($path) 

    $graphics.Dispose() 
    $bmp.Dispose() 
} 

#NUC bounds 
$bounds = [Drawing.Rectangle]::FromLTRB(0, -1080, 1920, 1080) 

#remote display bounds 
#$bounds = [Drawing.Rectangle]::FromLTRB(0, 0, 1280, 800) 

$PC_name=$(Get-WmiObject Win32_Computersystem).name 

$dateandtime = Get-Date -Format yyyy-MM-dd-hh-mm-ss 

$path_pcname= "C:\Scripts\Screenshots\" + $PC_name + "_screenshot_" + "$dateandtime"+ ".png" 


screenshot $bounds $path_pcname 

$limit = (Get-Date).AddMinutes(-15) 
$path_todelete = "C:\Scripts\Screenshots\" 

# Delete files older than the $limit. 
Get-ChildItem -Path $path_todelete -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force 

Start-Sleep -Seconds 60 

}

編輯: 我意識到,這行: [Reflection.Assembly]: :從GAC讀取的LoadWithPartialName(「System.Drawing」) 未正確啓動。不知道這是否有幫助。

+0

可能你的麻煩來自'System.Drawing'程序集的錯誤工作。嘗試修復你的.NET安裝。 – Vesper

回答

0

酷腳本。

我做得到它的工作的工作,在Windows 2012R2和Windows 7企業與SP 1和也的唯一修改都運行PowerShell的4,是可變的界限:

$bounds = [Drawing.Rectangle]::FromLTRB(0, 0, 1600, 900) # My resolution. 

的偉大工程。

現在,只是想爲它的目的。

感謝您分享您的腳本。

+0

它運行得非常好,如果你在PowerShell控制檯或獨立腳本中運行它。當我將它放在一個大循環或任務調度中時,它失敗了。 –

0

當從已登錄用戶(任何用戶,如果系統是終端)的備用上下文運行任務時,它無法訪問桌面,這就是爲什麼您會獲得空屏幕截圖的原因。該腳本的工作原理,除了我已經移動所有加載,預置並從循環中聲明一個函數的代碼,並且已經成功地將它作爲具有正確形成的屏幕截圖的計劃任務來運行。這種行爲是默認情況,並且是一個安全問題,因爲其他用戶不應該有權訪問當前用戶的桌面,包括本地系統。您可以將這樣的任務放置在任務管理器中以在特定用戶下運行,但系統會提示您輸入該用戶的密碼以將任務存儲在任務計劃程序中。創建任務後,您將能夠設置其時間表並將其設置爲僅在用戶登錄時執行(交互式任務)。如果是這樣,請在powershell.exe參數中使用-WindowStyle hidden來隱藏Powershell窗口。

總之,這隻能創建正確的屏幕截圖,如果從登錄的用戶下運行。如果用戶匹配,計劃任務就有資格。以系統或本地管理員身份運行不會讓您獲得屏幕截圖。