使用开关触发命令

时间:2017-01-16 21:18:17

标签: powershell

虽然似乎很快搞清楚了!

所以基本上我修改脚本以帮助我们加快员工加入流程,生病了几个问题,但我的第一个尝试是在创建后以交换方式启用用户帐户邮件。 我已经在那里放了一些选项,所以我们的人可以选择创建帐户的交换数据库。我无法解决的是如何正确地做到这一点。 (不确定正确的语法)

最初我尝试使用变量并将输入传递给它,但这似乎不起作用,因为变量没有被拾取,所以我现在尝试以下方式< / p>

我知道我没有正确写下面的表达,因为它们有错误 - 所以想知道我应该如何正确地写下面的

switch ($result) {
    1 { $database = "Enable-Mailbox -Identity domain\$un -Database Database1" } 
    2 { $database = "Enable-Mailbox -Identity domain\$un -Database Database2" } 
    3 { $database = "Enable-Mailbox -Identity domain\$un -Database Database3" } 
}

非常感谢帮助:)

2 个答案:

答案 0 :(得分:3)

我只想删除命令周围的引号,现在它们只是字符串:

switch ($result) {
    1 { $database = Enable-Mailbox -Identity domain\$un -Database Database1 }
    2 { $database = Enable-Mailbox -Identity domain\$un -Database Database2 }
    3 { $database = Enable-Mailbox -Identity domain\$un -Database Database3 }
}

答案 1 :(得分:1)

我在这种情况下的建议是将数据代码分开,因为这会使维护更加简单。它还使您可以重用数据。在这个例子中,我创建了一个哈希表, e.g:

Set-StrictMode -Version 2;

[Int32]     $Local:intHashKey          = 0;
[Int32]     $Local:intSelection        = 0;
[String]    $Local:strDatabase         = '';
[Hashtable] $Local:objExchangeDBLookup = @{ 1 = 'Database1';
                                            2 = 'Database2';
                                            3 = 'Database3'
                                          };
# Display options and get selection.
do {
    Foreach ( $intHashKey in ($objExchangeDBLookup.Keys | Sort-Object) ) { 
        Write-Host -Object ( '{0}. {1}' -f $intHashKey, $objExchangeDBLookup[$intHashKey] );
        } #Foreach
    $intSelection = Read-Host -Prompt "`nPlease select a database";
    } until ( $objExchangeDBLookup.ContainsKey( $intSelection ) );

# Create Mailbox.
try {
    $strDatabase = $objExchangeDBLookup[$intSelection];
    Write-Host -Object ( 'Creating mailbox on DB "{0}"...' -f $strDatabase );
    Enable-Mailbox -Identity domain\$un -Database $strDatabase;
    } #try
catch [System.Exception] {
    # Something went wrong.
    } #catch

代码退出详细,故意使用静态数据类型进行强化。