PowerShell コマンドレットの簡素化

PowerShell コマンドレットの簡素化

入力に多くの繰り返しを必要とする PowerShell コマンドレット (move-IMAPMailboxToExchange) があります。コマンド ラインから 2 つの引数だけを受け取る別のバッチ/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 パスワードと sourcelogin では機能しますが、@mail の隣では機能しません...。古い DOS 時代の %1 などを試してみましたが、機能しません。

私は 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

}

関連情報