2011-09-21 16 views
10

मेरे पास एक स्क्रिप्ट है (चलिए इसे myPSScript.ps1 कहते हैं) जो दो पैरामीटर लेता है और पूर्व निर्धारित चरणों को करता है। स्क्रिप्ट एक विंडोज सर्वर बॉक्स में स्थित है जो लोग स्क्रिप्ट लॉग इन और निष्पादित करते हैं। दिए गए समय में दो उपयोगकर्ताओं को लॉग इन करने का समर्थन करता है।पावरहेल - स्क्रिप्ट को आमंत्रित करने वाले उपयोगकर्ता को ढूंढें

मैं यह जानना चाहता हूं कि किसने स्क्रिप्ट का आह्वान किया था।

(Get-WmiObject -Class Win32_Process | Where-Object {$_.ProcessName -eq 'explorer.exe'}).GetOwner() | Format-Table Domain, User 

यह तब काम करता है जब उपयोगकर्ता वर्तमान में लॉग इन होता है और स्क्रिप्ट चलाने की कोशिश करता है। लेकिन क्या होगा यदि मेरे पास निर्धारित कार्यों में बैच फ़ाइल है और एक ही स्क्रिप्ट चलाएं?

उस स्थिति में एक ही आदेश एक शून्य अपवाद देता है, क्योंकि मशीन में कोई भी लॉग इन नहीं होता है।

क्या यह पता लगाने का कोई तरीका है कि कौन सी प्रक्रिया ने पावरहेल स्क्रिप्ट को बुलाया। मैं स्टार्ट-ट्रांसक्रिप्ट रिकॉर्ड याद करता हूं जो उपयोगकर्ता कमांड आदि से चलाया जाता है, इसलिए यह संभव होना चाहिए?

धन्यवाद! संजीव

उत्तर

18

दिलचस्प सवाल। मैं जैसे उपयोगकर्ता इतना पाने के लिए तीन अलग अलग तरीकों के साथ एक पटकथा लिखी:

([Environment]::UserDomainName + "\" + [Environment]::UserName) | out-file test.txt 
"$env:userdomain\$env:username" | out-file -append test.txt 
[Security.Principal.WindowsIdentity]::GetCurrent().Name | out-file -append test.txt 
notepad test.txt 

test.ps1 के रूप में यह सहेजा गया और के रूप में runas का उपयोग कर इसे कहा जाता है:

runas /user:domain\user "powershell e:\test.ps1" 

और मैं डोमेन \ उपयोगकर्ता सब मिल गया आउटपुट में तीन बार। उपयोगकर्ता के बीच बस अंतर करने के लिए runas उपयोग किया गया है (मैं !!) और डोमेन \ उपयोगकर्ता जिसके साथ मैं इसे चला रहा था। तो यह उस उपयोगकर्ता को देता है जो स्क्रिप्ट चला रहा है।

+0

बिल्कुल सही। यह तब भी काम करता है जब स्क्रिप्ट को एक अलग मशीन और विभिन्न उपयोगकर्ताओं से Invoke-Command का उपयोग करके ट्रिगर किया जाता है - जो वास्तव में मैं ढूंढ रहा था। अब मैं ऑडिट कर सकता हूं कि कौन और कब करता है :) – Sanjeev

+0

एक और समस्या। आइए मान लें कि एक डोमेन उपयोगकर्ता का उपयोग कर एक विंडोज सर्वर में लॉग इन किया गया है। उस स्थिति में स्क्रिप्ट हमें डोमेन उपयोगकर्ता देता है, लेकिन जब यह एक से अधिक व्यक्ति द्वारा उपयोग किया जाता है तो यह सहायक नहीं होता है। टर्मिनल सेवा प्रबंधक क्लाइंट नाम दिखाता है, जो क्लाइंट का नाम है जिसमें से व्यक्ति ने कनेक्ट किया है। क्या उस जानकारी को पाने का कोई तरीका है? – Sanjeev

+0

PSTerminalServices मॉड्यूल का उपयोग करना उस जानकारी को प्राप्त करने का विकल्प है। – Sanjeev

संबंधित मुद्दे