2009-08-20 3 views
6

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

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

ответ

1

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

EDIT: Забыл ссылку на 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#:

Here's just one of them....

+0

Perfect. Я думаю, что я собираюсь попробовать этот маршрут, так как я еще не знаком с Powershell, и похоже, это было бы хорошим введением. Благодаря! – RubyHaus

+0

Командлет кажется немного переборщиком для этой конкретной задачи. Несколько строк сценария, и нет никаких оснований компилировать что-либо или устанавливать что-либо (что вы должны делать с Cmdlet). –

+0

Но что должно делать Командование? –

0

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

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($_) } 
6

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

  • Clear-MSMQueue
  • Get-MSMQueue
  • Нью-MSMQueue
  • Test-MSMQueue