एक हेल्पडेस्क सपोर्ट टीम ने मुझसे एक PowerShell स्क्रिप्ट लिखने के लिए कहा ताकि रिमोट कंप्यूटर से उपयोगकर्ता डेस्कटॉप का स्क्रीनशॉट जल्दी से प्राप्त किया जा सके। मुख्य शर्त यह है कि हेल्पडेस्क कर्मचारी को ग्राफिकल रिमोट सपोर्ट टूल्स (SCCM, रिमोट असिस्टेंस, रिमोट डेस्कटॉप सेशन शैडोइंग, आदि) के माध्यम से उपयोगकर्ता के कंप्यूटर से कनेक्ट नहीं करना चाहिए।
PowerShell का उपयोग करके स्क्रीनशॉट कैप्चर करना
सबसे पहले, आइए सीखें कि PowerShell के साथ स्थानीय कंप्यूटर पर स्क्रीनशॉट कैसे लें। वर्तमान डेस्कटॉप छवि को कैप्चर करने के लिए, आप बिल्ट-इन .NET क्लास System.Windows.Forms का उपयोग कर सकते हैं। मुझे यह PowerShell स्क्रिप्ट मिली:
$Path = "C:\ScreenCapture"
# सुनिश्चित करें कि स्क्रीनशॉट रखने के लिए निर्देशिका बनाई गई है, अन्यथा इसे बनाएं
If (!(test-path $path)) {
New-Item -ItemType Directory -Force -Path $path
}
Add-Type -AssemblyName System.Windows.Forms
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
# वर्तमान स्क्रीन रिज़ॉल्यूशन प्राप्त करें
$image = New-Object System.Drawing.Bitmap($screen.Width, $screen.Height)
# एक ग्राफिक ऑब्जेक्ट बनाएं
$graphic = [System.Drawing.Graphics]::FromImage($image)
$point = New-Object System.Drawing.Point(0, 0)
$graphic.CopyFromScreen($point, $point, $image.Size);
$cursorBounds = New-Object System.Drawing.Rectangle([System.Windows.Forms.Cursor]::Position, [System.Windows.Forms.Cursor]::Current.Size)
# एक स्क्रीनशॉट प्राप्त करें
[System.Windows.Forms.Cursors]::Default.Draw($graphic, $cursorBounds)
$screen_file = "$Path\" + $env:computername + "_" + $env:username + "_" + "$((get-date).tostring('yyyy.MM.dd-HH.mm.ss')).png"
# स्क्रीनशॉट को PNG फ़ाइल के रूप में सहेजें
$image.Save($screen_file, [System.Drawing.Imaging.ImageFormat]::Png)
यह PowerShell स्क्रिप्ट स्क्रीनशॉट संग्रहीत करने के लिए एक निर्देशिका बनाती है, वर्तमान स्क्रीन रिज़ॉल्यूशन प्राप्त करती है, वर्तमान वर्कस्पेस की छवि कैप्चर करती है और इसे PNG फ़ाइल के रूप में सहेजती है। PowerShell स्क्रिप्ट चलाएं और जांचें कि निर्दिष्ट निर्देशिका में एक png फ़ाइल दिखाई देती है (आप शेयर्ड नेटवर्क फ़ोल्डर का UNC पथ निर्दिष्ट कर सकते हैं) जिसमें आपके डेस्कटॉप का स्क्रीनशॉट होता है। सुविधा के लिए, PNG फ़ाइल के नाम में कंप्यूटर नाम, उपयोगकर्ता नाम, वर्तमान दिनांक और समय शामिल होता है।
यदि आप PS स्क्रिप्ट को बैच फ़ाइल से कॉल करना चाहते हैं, तो इस कमांड का उपयोग करें (इस मामले में, आपको PowerShell एक्जीक्यूशन पॉलिसी सेटिंग्स बदलने की आवश्यकता नहीं है):
powershell.exe -executionpolicy bypass -file c:\ps\CaptureLocalScreen.ps1
PowerShell स्क्रिप्ट संपादित करने के लिए, मैं पावरशेल ISE के बजाय विजुअल स्टूडियो कोड का उपयोग करना पसंद करता हूं।
आप सभी डोमेन उपयोगकर्ताओं के डेस्कटॉप पर PowerShell स्क्रिप्ट के लिए शॉर्टकट रखने और इसे कॉल करने के लिए हॉट की असाइन करने के लिए एक GPO बना सकते हैं। अब, जब किसी ऐप में कोई समस्या या त्रुटि दिखाई देती है, तो उपयोगकर्ता केवल असाइन की गई हॉट की दबा सकता है। फिर उपयोगकर्ता डेस्कटॉप का स्क्रीनशॉट हेल्पडेस्क शेयर्ड फ़ोल्डर में दिखाई देता है।
PowerShell का उपयोग करके रिमोट कंप्यूटर से डेस्कटॉप स्क्रीनशॉट कैसे लें?
अगला कार्य PowerShell के माध्यम से रिमोट कंप्यूटर पर उपयोगकर्ता के डेस्कटॉप का स्क्रीनशॉट प्राप्त करना है। यह या तो विंडोज 10 चलाने वाला एक स्टैंडअलोन कंप्यूटर हो सकता है या एक RDS सर्वर।
ग्राफिकल टूल का उपयोग करके RDS सर्वर पर उपयोगकर्ता डेस्कटॉप से कनेक्ट करने का एक पसंदीदा तरीका शैडो RDP सत्र है।
यदि आप RDS सर्वर से (या डेस्कटॉप विंडोज से, जिसमें एकाधिक समवर्ती RDP कनेक्शन की अनुमति है) डेस्कटॉप स्क्रीनशॉट प्राप्त करना चाहते हैं, तो आपको पहले रिमोट कंप्यूटर पर उपयोगकर्ता सत्र आईडी प्राप्त करनी होगी। निम्न PowerShell स्क्रिप्ट में रिमोट कंप्यूटर/सर्वर का नाम और एक उपयोगकर्ता खाता निर्दिष्ट करें:
$ComputerName = "nld-rds1"
$RDUserName = "h.jansen"
$quser = (((query user /server:$ComputerName) -replace '^>', '') -replace '\s{2,}', ',' | ConvertFrom-Csv)
$usersess=$quser | where {$_.USERNAME -like $RDUserName -and $_.STATE -eq "Active"}
$usersessID=$usersess.ID
यदि आप एकल उपयोगकर्ता वाले रिमोट कंप्यूटर से स्क्रीनशॉट प्राप्त करने के लिए स्क्रिप्ट का उपयोग करते हैं, तो सत्र संख्या हमेशा 1 होगी। पिछले RDS सर्वर क्वेरी ब्लॉक को $usersessID = 1 से बदलें।
इसे और सुविधाजनक बनाने के लिए, PowerShell स्क्रिप्ट फ़ाइल को शेयर्ड नेटवर्क फ़ोल्डर में सहेजें। फिर CaptureLocalScreen.ps1 फ़ाइल संपादित करें और पथ बदलें:
$Path = \\nld-fs01\Screen\Log
उपयोगकर्ता स्क्रीनशॉट इस फ़ोल्डर में सहेजे जाएंगे। डोमेन ग्रुप Authenticated Users के लिए फ़ोल्डर पर लिखने की अनुमति दें।
उपयोगकर्ता सत्र आईडी प्राप्त करने के बाद, आप PsExec टूल का उपयोग करके उपयोगकर्ता सत्र से रिमोटली कनेक्ट कर सकते हैं और स्क्रिप्ट चला सकते हैं:
.\PsExec.exe -s -i $usersessID \\$ComputerName powershell.exe -executionpolicy bypass -WindowStyle Hidden -file "\\nld-fs01\Screen\CaptureLocalScreen.ps1"
फिर एक हेल्पडेस्क टीम सदस्य अपने कंप्यूटर से स्क्रिप्ट चला सकता है, और रिमोट कंप्यूटर के वर्तमान डेस्कटॉप का स्क्रीनशॉट निर्दिष्ट निर्देशिका में दिखाई देगा।