Назад | Перейти на главную страницу

Упрощение командлета powershell

У меня есть командлет powershell (move-IMAPMailboxToExchange), для ввода которого требуется много повторений. Я хочу вызвать его с помощью другого сценария batch / powershell, который просто берет два аргумента из командной строки. Я пробовал все соглашения о вызовах, какие только мог придумать, но не могу заставить их работать.

Я хочу этот:

Move-IMAPMailboxToExchange -SourcePassword P@ssW0rd! -allowunsecureconnection -sourceLoginId username -sourceserver source.ser.ver -sourceidentity username@mail.dom.ain targetclientaccessserver "client.access.ser.ver" -targetidentity username@mail.dom.ain -verbose

Чтобы быть таким:

migrate-user username P@ssW0rd!

Я пробовал $ args, но кажется, что он расширяется. Я пробовал $ args [0], который работает с паролем без пароля и исходным кодом, но не работает рядом с @mail .... Я пробовал% 1 и т. Д. Из старых дней DOS, но это не так. т работать.

Я юниксовский придурок и еще не совсем разбираюсь в PowerShell.

Насколько я помню, одинарные кавычки - это то, как PowerShell обозначает что-то как «не анализировать». так...

Вы можете сделать что-то вроде этого

$username=$args[0]
$passwd=$args[1]

Move-IMAPMailboxToExchange [all that jazz]

Как способ твердо объявить переменные в контексте сценария. Если у вас возникли проблемы с конструированием переменных -sourceidentity и -targetidentity, вы можете предварительно сконструировать их, прежде чем помещать их в команду move-imaptoexchange ...

$sourceident="$username"+'@srcmail.dom.ain'
$targeditent="$username"+'@tgtmail.dom.ain'

Вы должны иметь возможность определить функцию или файл сценария для своего командлета, например:

    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

}