У меня есть командлет 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
}