
Ich habe ein Powershell-Cmdlet (move-IMAPMailboxToExchange), dessen Eingabe viele Wiederholungen erfordert. Ich möchte es mit einem anderen Batch-/Powershell-Skript aufrufen, das nur zwei Argumente aus der Befehlszeile übernimmt. Ich habe jede Aufrufkonvention ausprobiert, die mir einfällt, aber ich bekomme es nicht zum Laufen.
Ich will das:
Move-IMAPMailboxToExchange -SourcePassword P@ssW0rd! -allowunsecureconnection -sourceLoginId username -sourceserver source.ser.ver -sourceidentity [email protected] targetclientaccessserver "client.access.ser.ver" -targetidentity [email protected] -verbose
Um dies zu sein:
migrate-user username P@ssW0rd!
Ich habe $args ausprobiert, aber das scheint sich zu erweitern. Ich habe $args[0] ausprobiert, was mit dem Bareword-Passwort und dem Sourcelogin funktioniert, aber nicht neben @mail.... Ich habe %1 usw. aus der alten DOS-Zeit ausprobiert, aber das funktioniert nicht.
Ich bin ein Unix-Nerd und verstehe Powershell noch nicht ganz.
Antwort1
Soweit ich mich erinnere, kennzeichnet PowerShell etwas mit einfachen Anführungszeichen als „nicht analysieren“. Also …
Vielleicht möchten Sie so etwas tun
$username=$args[0]
$passwd=$args[1]
Move-IMAPMailboxToExchange [all that jazz]
Als Möglichkeit, die Variablen im Kontext des Skripts eindeutig zu deklarieren. Wenn Sie Probleme beim Erstellen der Variablen -sourceidentity und -targetidentity haben, sollten Sie sie vorab erstellen, bevor Sie sie in den Befehl „move-imaptoexchange“ einfügen …
$sourceident="$username"+'@srcmail.dom.ain'
$targeditent="$username"+'@tgtmail.dom.ain'
Antwort2
Sie sollten in der Lage sein, eine Funktion oder Skriptdatei rund um Ihr Cmdlet zu definieren, etwa wie folgt:
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
}