
入力に多くの繰り返しを必要とする 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
}