使用Powershell自动进行MSMQ设置

时间:2009-08-20 23:55:09

标签: c# powershell msmq

我正在为我支持的应用程序配置新的测试服务器。它使用大约35个不同的MSMQ队列,并且手动创建这些队列显然不是很有趣。特别是因为应用程序的生产版本也在移动服务器,所以我将重新做到这一点。我正在寻找的是一种自动创建这些队列的方法,而Powershell(基于我对它的有限了解)似乎是要走的路。

有没有人有关于如何实现这一目标的任何提示?

4 个答案:

答案 0 :(得分:6)

也许是类似的东西。它有点冗长,但它有助于证明PowerShell可以在没有CmdLet的情况下完成此任务。

# Loads the assembly into PowerShell (because it's not a pre-loaded one)
[Reflection.Assembly]::LoadWithPartialName( "System.Messaging" ) | Out-Null

# This is just an array which could also just be a file
$queueList = ( ".\q1", ".\q2", ".\q3", ".\q4" )

# Create the queues by piping the list into the creation function
# $_ refers to the current obect that the ForEach-Object is on
$queueList | ForEach-Object { [System.Messaging.MessageQueue]::Create( $_ ) }

答案 1 :(得分:6)

如果您使用的是PowerShell Community Extensions(PSCX),则它具有用于创建和管理MSMQ的cmdlet:

  • Clear-MSMQueue
  • 获取-MSMQueue
  • 新-MSMQueue
  • 试验MSMQueue

答案 2 :(得分:1)

我认为您应采取的方法是创建自己的Powershell cmdlet(Commandlet)。基本上,您从基类继承,重写方法,这是从Powershell调用该cmdlet时调用的方法。这样你就可以在C#中做你需要做的事情,只需从Powershell中调用它。如下图所示:

编辑:忘记链接到MSDN以创建cmdlet:http://msdn.microsoft.com/en-us/library/dd878294(VS.85).aspx

[Cmdlet(VerbsCommunications.Get, "MyCmdlet")]
public class MyCmdlet : Cmdlet
{
    [Parameter(Mandatory=true)]
    public string SomeParam {get; set;}

    protected override void ProcessRecord()
    {
         WriteObject("The param you passed in was: " + SomeParam);
    }

}

然后,您可以从Powershell中调用此cmdlet,如下所示:

PS>Get-MyCmdlet -SomeParam 'whatever you want'

然后,要使用MSMQ,有许多在线样本如何在C#中完成此任务:

Here's just one of them....

答案 3 :(得分:0)

没有理由不能在PowerShell中使用System.Messaging。只需加载正确的程序集,您就可以根据自己的内容创建/删除/挂钩您的队列。创建自定义cmdlet当然是一个有趣的选项,但根据您的需要可能会有些过分(简单的脚本可能就是这样)。