Автоматическая настройка MSMQ с помощью Powershell

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

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


person Scott Salyer    schedule 20.08.2009    source источник


Ответы (4)


Я думаю, что вам следует создать свой собственный командлет 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#:

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

person BFree    schedule 21.08.2009
comment
Идеально. Я думаю, что собираюсь попробовать этот путь, так как я еще не знаком с Powershell, и кажется, что это было бы хорошим введением. Спасибо! - person Scott Salyer; 21.08.2009
comment
Командлет кажется немного излишним для этой конкретной задачи. Несколько строк сценария, и нет причин что-либо компилировать или устанавливать (что вам нужно делать с помощью командлета). - person Scott Saad; 21.08.2009
comment
Но что должен делать командлет? - person Aaron Jensen; 24.08.2011
comment
@splattered: этот ответ был дан более двух лет назад, но вы можете видеть, что я предоставил ссылку на использование MSMQ с .Net, не уверен, почему вы почувствовали необходимость понизить голос... - person BFree; 24.08.2011

Может что-то вроде. Это немного многословно, но это поможет продемонстрировать, что 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( $_ ) }
person Scott Saad    schedule 21.08.2009

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

  • Clear-MSMQueue
  • Get-MSMQueue
  • Новый-MSMQueue
  • Test-MSMQueue
person Keith Hill    schedule 21.08.2009

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

person tomasr    schedule 21.08.2009