Vereinfachung des Powershell-Cmdlets

Vereinfachung des Powershell-Cmdlets

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

}

verwandte Informationen