
Eu tenho um cmdlet do PowerShell (move-IMAPMailboxToExchange) que requer muita repetição para entrar. Quero chamá-lo com outro script em lote/Powershell que recebe apenas dois argumentos da linha de comando. Tentei todas as convenções de chamada que consigo imaginar, mas não consigo fazer funcionar.
Eu quero isso:
Move-IMAPMailboxToExchange -SourcePassword P@ssW0rd! -allowunsecureconnection -sourceLoginId username -sourceserver source.ser.ver -sourceidentity [email protected] targetclientaccessserver "client.access.ser.ver" -targetidentity [email protected] -verbose
Para ser isso:
migrate-user username P@ssW0rd!
Eu tentei $args, mas isso parece se expandir. Eu tentei $args[0] que funciona na senha simples e no sourcelogin, mas não funciona próximo ao @mail.... Eu tentei% 1, etc, desde os velhos tempos do DOS, mas isso não acontece. não funciona.
Eu sou um idiota do Unix e ainda não estou grocando o PowerShell.
Responder1
Pelo que me lembro, aspas simples é como o PowerShell designa algo como 'não analisar'. então...
Você pode querer fazer algo assim
$username=$args[0]
$passwd=$args[1]
Move-IMAPMailboxToExchange [all that jazz]
Como forma de declarar firmemente as variáveis dentro do contexto do script. Se você estiver tendo problemas para construir as variáveis -sourceidentity e -targetidentity, você pode querer pré-construí-las antes de colocá-las no comando move-imaptoexchange...
$sourceident="$username"+'@srcmail.dom.ain'
$targeditent="$username"+'@tgtmail.dom.ain'
Responder2
Você deve ser capaz de definir uma função ou arquivo de script em torno do seu cmdlet, assim:
function migrate-user
{
param($username,$password)
Move-IMAPMailboxToExchange -SourcePassword $password -allowunsecureconnection -sourceLoginId $username -sourceserver 'source.ser.ver' -sourceidentity "$username`@mail.dom.ain" targetclientaccessserver 'client.access.ser.ver' -targetidentity "$username`@mail.dom.ain" -verbose
}