我正在为我支持的应用程序配置新的测试服务器。它使用大约35个不同的MSMQ队列,并且手动创建这些队列显然不是很有趣。特别是因为应用程序的生产版本也在移动服务器,所以我将重新做到这一点。我正在寻找的是一种自动创建这些队列的方法,而Powershell(基于我对它的有限了解)似乎是要走的路。
有没有人有关于如何实现这一目标的任何提示?
答案 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:
答案 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#中完成此任务:
答案 3 :(得分:0)
没有理由不能在PowerShell中使用System.Messaging。只需加载正确的程序集,您就可以根据自己的内容创建/删除/挂钩您的队列。创建自定义cmdlet当然是一个有趣的选项,但根据您的需要可能会有些过分(简单的脚本可能就是这样)。