
У меня есть командлет powershell (move-IMAPMailboxToExchange), который требует много повторений для ввода. Я хочу вызвать его с помощью другого пакетного/powershell-скрипта, который просто берет два аргумента из командной строки. Я перепробовал все соглашения о вызовах, которые только мог придумать, но не могу заставить их работать.
Я хочу это:
Move-IMAPMailboxToExchange -SourcePassword P@ssW0rd! -allowunsecureconnection -sourceLoginId username -sourceserver source.ser.ver -sourceidentity [email protected] targetclientaccessserver "client.access.ser.ver" -targetidentity [email protected] -verbose
Чтобы было так:
migrate-user username P@ssW0rd!
Я пробовал $args, но это, похоже, расширяется. Я пробовал $args[0], который работает в bareword password и sourcelogin, но не работает рядом с @mail... Я пробовал %1 и т. д. со времен старого DOS, но это не работает.
Я любитель Unix и пока не совсем понимаю PowerShell.
решение1
Насколько я помню, одинарные кавычки — это то, как 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'
решение2
Вы должны иметь возможность определить функцию или файл сценария вокруг вашего командлета, например так:
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
}