قم بتشغيل Exchange Management Shell Cmdlets من Visual Basic/C#/. Net App

StackOverflow https://stackoverflow.com/questions/2641543

  •  27-09-2019
  •  | 
  •  

سؤال

الهدف: قدم خدمة ويب باستخدام Visual Basic أو C# أو .NET التي تتفاعل مع قذيفة إدارة Exchange ، وإرسال أوامرها لتشغيل CMDlets ، وإرجاع النتائج كـ XML. (لاحظ أنه يمكننا استخدام أي lanaguage لكتابة الخدمة ، ولكن نظرًا لأنها مربع Windows ولدينا Visual Studio 2008 ، فقد بدا أن الحل الأسهل سيكون مجرد استخدامها لإنشاء خدمة ويب VB/.NET. في الواقع ، إنه كان من السهل جدًا القيام بذلك ، فقط نقطة وانقر.)

المشكلة: كيفية تشغيل شل Management Shell Cmdlet من خدمة الويب ، على سبيل المثال ، Get-DistributionGroupMember "الرؤساء المباشرون"

يبدو أننا يجب أن نكون قادرين على إنشاء برنامج نصي PowerShell الذي يدير CMDLET ، وأن نكون قادرين على استدعاء ذلك من سطر الأوامر ، وبالتالي اتصل به فقط من داخل البرنامج. هل هذا الصوت صحيح؟ إذا كان الأمر كذلك ، فكيف سأقوم بهذا؟ شكرًا. يمكن أن تكون الإجابة غير ملائمة للغة ، ولكن من المحتمل أن تكون Visual Basic أفضل لأن هذا هو ما قمت بتحميله لخدمة ويب الاختبار.

هل كانت مفيدة؟

المحلول 2

حسنًا ، لم تحصل على إجابة ، لكن نوعًا ما اكتشفها. واجهت مشكلة في الحصول على PowerShell 64 بت للتشغيل ، ولكن في النهاية تم ترقيتها إلى Exchange 2010 واستخدمت C# ثم لم تعد هناك مشكلة.

الإجابة المختصرة هي أنك تقوم بإنشاء تطبيق PowerShell جديد في Visual Studio ، ثم يمكنك إضافة إشارة إلى System.Management.Automation DLL. يتيح لك ذلك إعداد مساحة اسم لـ PowerShell وإجراء مكالمات إليها. http://msdn.microsoft.com/en-us/library/system.management.automation(vs.85).aspx يمكنك إنشاء خط أنابيب باستخدام فئة خط الأنابيب المتاحة http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces.pipeline(vs.85).aspx من أجل تنشيط الأوامر الخاصة بك مرة أخرى. ثم تضع الأوامر الخاصة بك ، وأضف معلمات إذا لزم الأمر. قم بتشغيل التطبيق وسيعود النتائج من cmdlets التي اتصلت بها في PowerShell ويمكنك الانتقال من هناك.

نصائح أخرى

الكود الفعلي المقتبس من من MSDN http://msdn.microsoft.com/en-us/library/exchange/bb332449(v=exchg.80).aspx يمكن أن تكون صعبة لأنك يجب أن تحصل على الأذونات بشكل صحيح وتشغيلها على جهاز Macine مع جميع المكونات الإضافية لـ Exchange:

using Microsoft.Win32;
using System.Collections.ObjectModel;
using System.IO;
using System.Management.Automation.Runspaces;
using System.Reflection;

    public static Runspace GetExchangeRunspace()
    {
        return GetExchangeRunspace("");
    }
    public static Runspace GetExchangeRunspace(string snapIn)
    {
        string consoleFilePath = (ScriptEngine.GetExchangeAssemblyPath() 
            + "bin\\exshell.psc1").Replace("Exchange Server", "EXCHAN~1");
        Response.Write("<br/>" + consoleFilePath);
        PSConsoleLoadException warnings = null;
        RunspaceConfiguration runspaceConfiguration 
            = RunspaceConfiguration.Create(consoleFilePath, out warnings);
        if ((snapIn + "").Trim().Length > 0)
        {
            PSSnapInException warning = null;
            Response.Write("<br/>Start AddPSSnapIn..." + snapIn);
            Response.Write("<br/>" 
                + runspaceConfiguration.AddPSSnapIn(snapIn, out warning));
            Response.Write("<br/>" + warning);
        }
        return RunspaceFactory.CreateRunspace(runspaceConfiguration);
    }

    private static string GetExchangeAssemblyPath()
    {
        string path = "";
        try
        {
            RegistryKey key = Registry.LocalMachine.OpenSubKey(
                "SOFTWARE\\Microsoft\\ExchangeServer\\v14\\Setup"); // or your version
            if (key != null)
            {
                path = Path.GetFullPath(string.Concat(key.GetValue("MsiInstallPath")));
                Response.Write(path);
            }
        }
        catch (Exception ex) { }
        return path;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top