2010-02-13 9 views
10

के रूप में कैसे चलाएं मैं एक सी # अनुप्रयोग से पावरशेल स्क्रिप्ट चलाने की कोशिश कर रहा हूं और मुझे सी-एप एक गैर-व्यवस्थापक उपयोगकर्ता के रूप में चलने पर स्क्रिप्ट चलाने की आवश्यकता है (उदाहरण के लिए नेटवर्क सेवा या कुछ अन्य डोमेन खाता)।सी # से पावरशेल स्क्रिप्ट को गैर-उन्नत उपयोगकर्ता

इससे पहले, मैं निम्नलिखित कोड का उपयोग कर रहा था: (! कृपया मुझे सिखाने वहाँ एक बेहतर तरीका है)

using (RunspaceInvoke invoker = new RunspaceInvoke()) 
{ 
    // load the powershell module 
    invoker.Invoke("Import-Module MyModule"); 

    // run the cmdlet defined in the module 
    invoker.Invoke("MyCmdlet"); 
} 

मैं नहीं जानता कि यह एक मॉड्यूल में परिभाषित cmdlets चलाने के लिए सबसे अच्छा तरीका है या नहीं। किसी भी मामले में, अगर मैं व्यवस्थापकीय उपयोगकर्ता के रूप में चल रहा हूं तो यह पूरी तरह से काम करता है। मैंने इसे नेटवर्क सेवा के रूप में चलाने की कोशिश की, हालांकि, मुझे रनस्पेस इनवोक के निर्माता में एक असभ्य त्रुटि मिली:

अनुरोधित रजिस्ट्री एक्सेस की अनुमति नहीं है।

क्या कोई तरीका है कि मैं अपने पावरशेल cmdlets को गैर-उन्नत उपयोगकर्ता जैसे नेटवर्क सेवा के रूप में चला सकता हूं? मुझे रजिस्ट्री तक पहुंचने की आवश्यकता नहीं है या नहीं। Cmdlet को भी ऊंचा विशेषाधिकारों की आवश्यकता नहीं है।

उत्तर

-1

मुझे लगता है कि this प्रविष्टि आपके प्रश्न का उत्तर देगी। lkaso जवाब

पर

+0

धन्यवाद, लेकिन मैं ऊपर उठाने या प्रतिरूपण करने की कोशिश नहीं कर रहा हूं। मैं PowerShell स्क्रिप्ट को * कम-विशेषाधिकार प्राप्त * उपयोगकर्ता के रूप में चलाने का प्रयास कर रहा हूं, एक उच्च-विशेषाधिकार प्राप्त उपयोगकर्ता नहीं। –

0

अधिक इस दिखाता है कि किसी को भी, न सिर्फ व्यवस्थापक के रूप में इसे चलाने के लिए। आपको इसे किसी के रूप में चलाने की ज़रूरत है, सेवा एक भारी प्रतिबंधित खाते के रूप में चल रही है जो कुछ भी नहीं कर सकती है।

या जो उपयोगकर्ता

2

हम नीचे के एक संस्करण का उपयोग के रूप में सेवा ही चलाते हैं। "स्क्रिप्ट" पैरामीटर चलाने के लिए पीएस स्क्रिप्ट है। हम इसे कस्टम कमांड लाइन से उपयोग करते हैं ताकि हम पीएस में लिखे गए कुछ लोगों के साथ सी # कमांड को मिश्रित कर सकें। "परिणाम" का उपयोग आपकी स्क्रिप्ट के मूल्यांकन को कैप्चर करने के लिए किया जा सकता है। "आउट-डिफॉल्ट" लाइन का अर्थ है कि पीएस स्क्रिप्ट का आउटपुट कंसोल पर लिखा गया है। इसका एक संस्करण टेक्स्टबॉक्स या आउटपुट को आउटपुट कैप्चर कर सकता है यदि आपके पास WPF ऐप का WinForm है।

public void run(string script) 
{ 
    IEnumerable<PSObject> results; 
    var config = RunspaceConfiguration.Create(); 
    var host = new ScriptHost(); 
    using (var runspace = RunspaceFactory.CreateRunspace(host, config)) 
    { 
     runspace.Open(); 
     runspace.SessionStateProxy.SetVariable("prog", this); 

     using (var pipeline = runspace.CreatePipeline()) 
     { 
      if (!string.IsNullOrEmpty(scriptPath)) 
       pipeline.Commands.AddScript(string.Format("$env:path = \"{0};\" + $env:path", scriptPath)); 

      pipeline.Commands.AddScript(script); 

      var outDefault = new Command("out-default"); 
      outDefault.MergeMyResults(PipelineResultTypes.Error, PipelineResultTypes.Output); 
      pipeline.Commands.Add(outDefault); 

      results = pipeline.Invoke(); 
     } 
    } 
} 
0

आप SysInternals देखने के लिए रजिस्ट्री पहुँच इसे पूरा करने की कोशिश कर रहा है procmon उपकरण का उपयोग कर सकते हैं? शायद इससे आपको कुछ अंतर्दृष्टि मिल जाएगी कि समस्या को हल करने के लिए आप क्या कर सकते हैं।

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