我有一个 powershell cmdlet (move-IMAPMailboxToExchange),需要多次重复输入。我想用另一个批处理/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
您应该能够围绕您的 cmdlet 定义一个函数或脚本文件,如下所示:
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
}