Автоматическая настройка MSMQ с помощью Powershell - PullRequest
6 голосов
/ 21 августа 2009

Я в процессе настройки нового тестового сервера для поддерживаемого приложения. Он использует около 35 различных очередей MSMQ, и их создание, очевидно, не доставляет большого удовольствия. Тем более, что рабочая версия приложения также перемещает серверы, поэтому я буду делать это снова и снова. То, что я ищу, - это автоматизированный способ создания этих очередей, и Powershell (основываясь на моих ограниченных знаниях об этом) кажется мне подходящим.

У кого-нибудь есть какие-нибудь советы о том, как мне это сделать?

Ответы [ 4 ]

6 голосов
/ 21 августа 2009

Если вы используете Расширения сообщества PowerShell (PSCX), у него есть командлеты для создания и управления MSMQ:

  • Clear-MSMQueue
  • Get-MSMQueue
  • New-MSMQueue
  • Test-MSMQueue
6 голосов
/ 21 августа 2009

Может быть, что-то вроде. Это немного многословно, но это поможет продемонстрировать, что 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 голос
/ 21 августа 2009

Я думаю, что вы должны использовать свой собственный командлет Powershell (Commandlet). По сути, вы наследуете от базового класса, переопределяете метод, и этот метод вызывается при вызове этого командлета из Powershell. Таким образом, вы можете делать то, что вам нужно, в C # и просто вызывать его из Powershell. Рисунок примерно так:

РЕДАКТИРОВАТЬ: Забыли ссылку на MSDN для создания командлетов: 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 примерно так:

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

Затем, чтобы использовать MSMQ, есть много примеров в Интернете о том, как это сделать из C #:

Вот только один из них ....

0 голосов
/ 21 августа 2009

Нет причин, по которым вы не можете использовать System.Messaging из PowerShell. Просто загрузите нужную сборку, и вы сможете создавать / удалять / подключать свои очереди к своему сердцу. Создание пользовательского командлета, безусловно, является интересным вариантом, но может оказаться излишним в зависимости от того, что вы хотите (простой скрипт может просто помочь).

...