none
請教 ASP.NET 上建立郵件傳輸規則 RRS feed

  • 問題

  • 請問一下,我在 PowerShell 中把建立傳輸規則的指令碼拿到 ASP.NET 中在 Web Form 上運行並建立,在 PowerShell 是可以執行並建立該規則,但是使用 ASP.NET 在 Web Form 上 Run 完時沒出現什麼錯誤訊息,只見 Pipeline.Invoke() 回傳的 Collection<PSObject> 的資料數量(Count)是 0 於是去 Exchange 上查看的確沒建立成功,請教一下該如何解決?

    我已在 web.config 加上模擬 IIS 帳戶的設定,結果還是一樣的。
    以下是我的程式碼:
    1 RunspaceConfiguration RsConf = RunspaceConfiguration.Create();
    2 PSSnapInException PsException = null;
    3 RsConf.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out PsException);
    4 Runspace myRunSpace = RunspaceFactory.CreateRunspace(RsConf);
    5 myRunSpace.Open();
    6 Pipeline Pip = myRunSpace.CreatePipeline();
    7
    8 string CommandScript = "";
    9
    10 CommandScript = "$Condition = Get-TransportRulePredicate -Name SubjectContains" + Environment.NewLine +
    11 "$Condition.Words = @(\"Test\")" + Environment.NewLine +
    12 "$Action = Get-TransportRuleAction -Name PrependSubject" + Environment.NewLine +
    13 "$Action.Prefix = \"This is \"" + Environment.NewLine +
    14 "New-TransportRule -Name \"Change Subject\" -Conditions $Condition -Actions $Action";
    15
    16 Pip.Commands.AddScript(CommandScript);
    17 Collection<PSObject> Result = Pip.Invoke();
    18 Response.Write(Result.Count);
    19 Result.Clear();
    20 Pip.Dispose();
    2009年3月9日 上午 07:50

解答

所有回覆

  • 請確認於 ASP.NET 中執行該 shell 的 IUSR_<電腦名稱> 之帳戶,有執行 shell 之適當權限
    在預設狀態下, IUSR_<電腦名稱> 僅具備最小之執行權限
    ☞ 這裡是「免費的討論區」付費支援服務請造訪 此處享受尊榮服務
    2009年3月12日 下午 01:48
  • 謝謝 Alex Chuo,不過我已經在web.config加上模擬帳戶的方式,依然不行,同樣試了 http://support.microsoft.com/default.aspx/kb/306158 該頁面的方法都沒辦法達到要求,請問我是不是漏掉什麼?
    2009年3月13日 上午 04:54
  •  [ASP.NET]在ASP.NET應用程式中模擬高權限使用者執行程式
    ☞ 這裡是「免費的討論區」付費支援服務請造訪 此處享受尊榮服務
    2009年3月14日 上午 09:12
  •  感謝 Alex 君回覆 :-)
    2009年3月15日 上午 10:24
    版主
  • 你好,我後來設定 IIS 的應用程式集的區域,原本的 Get-MailboxStatistics 指令也因安全性的關係不能執行,後來更改應用程式集的設定就能執行了,不過傳輸規則的建立還是沒有成功,想問一下,Exchange Server 2007 是否會阻擋 Web Form 去做修改的動作呢?

    我也試過模擬系統帳戶的方式。

    我貼上來我測試的 Code:
    // Sample.aspx.cs  
    public partial class _Index : System.Web.UI.Page  
    {  
        protected void Page_Load(object sender, EventArgs e)  
        {  
            string Script_1 = "$Mail = Get-MailboxStatistics" + Environment.NewLine +  
                "$Mail";  
     
            string Script_2 = "$Condition = Get-TransportRulePredicate -Name SubjectContains" + Environment.NewLine +  
                "$Condition.Words = @('Test')" + Environment.NewLine +  
                "$Action = Get-TransportRuleAction -Name PrependSubject" + Environment.NewLine +  
                "$Action.Prefix = 'This is '" + Environment.NewLine +  
                "New-TransportRule -Name 'Change Subject' -Conditions $Condition -Actions $Action";  
     
            //Collection<PSObject> Result = new PowerShell().Execute(Script_1); // Script_1 可以 Run(原本也是因安全性問題不行 Run 的)  
     
            Collection<PSObject> Result = new PowerShell().Execute(Script_2); // Script_2 Run 不成功  
            Response.Write(Result.Count);  
        }  

    // PowerShell.cs  
    public class PowerShell  
    {  
        RunspaceConfiguration PowerShellConf;  
        PSSnapInException PsException;  
        public PowerShell()  
        {  
            PowerShellConf = RunspaceConfiguration.Create();  
            PsException = null;  
            PowerShellConf.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin"out PsException);  
        }  
     
        public Collection<PSObject> Execute(string CommandScript)  
        {  
            using (Runspace Space = RunspaceFactory.CreateRunspace(PowerShellConf))  
            {  
                Space.Open();  
                using (Pipeline Pipe = Space.CreatePipeline())  
                {  
                    Pipe.Commands.AddScript(CommandScript);  
                    return Pipe.Invoke();  
                }  
            }  
        }  
    2009年3月16日 上午 04:11
  • 我製成 COM+ 元件並註冊在 server 上已測試成功可建立傳輸規則了,不過衍生出一個新問題,就是我想在頁面將 COM 回傳的物件經處理後顯示給 User 看,在轉換 Collection<T> 的時候出現以下訊息:

    無法將型別 'System.__ComObject' 的 COM 物件轉換為類別型別 'System.Collections.ObjectModel.Collection`1[System.Management.Automation.PSObject]'。代表 COM 元件的型別執行個體,無法轉換為不代表 COM 元件的型別; 但只要基礎 COM 元件支援介面 IID 的 QueryInterface 呼叫,即可將其轉換為介面。

    請問有沒有將 System.__ComObject 轉成 ASP.NET Object 的範例可參考呢?
    2009年3月16日 上午 07:02
  • 您的問題
    已經超出本版的討論範圍
    偏離 Windows PowerShell 的主題
    ☞ 這裡是「免費的討論區」付費支援服務請造訪 此處享受尊榮服務
    2009年3月16日 上午 07:05
  • 已轉往 ASP.NET 討論區發問 感謝告知
    2009年3月16日 上午 07:56