【发布时间】:2019-12-16 22:20:42
【问题描述】:
我正在编写一个脚本,如果我可以将一个数组 ($arrUserTemplates= $Mailbox1, $Mailbox2, $Mailbox3) 传递给一个函数,它会变得更容易,但我似乎无法弄清楚。我通过使用Param($arrUserTemplates, $Mailbox1, $Mailbox2, $Mailbox3) 传递变量,但脚本似乎忽略了它并且没有传递$arrUserTemplates 内的变量。
这样可以重现问题(函数比较长,里面有开关):
$arrUserTemplates= $Mailbox1, $Mailbox2, $Mailbox3
Function CreateMailboxes{
Param($StorePrefix, $Store, $SharedMailboxPass, $StoreEmailOU, $EcommSharedMailboxOU, $DomainController, $arrUserTemplates, $Mailbox1, $Mailbox2, $Mailbox3)
Foreach ($MailboxUser in $arrUserTemplates){
Write-host "arrUserTemplates: $arrUserTeamplates"
}
}
CreateMailboxes $StorePrefix $Store $SharedMailboxPass $StoreEmailOU $EcommSharedMailboxOU $DomainController $arrUserTemplates $Mailbox1 $Mailbox2 $Mailbox3
这会简单地返回“arrUserTemplates:”三次。
我使用以下方式调用它:CreateMailboxes $StorePrefix $Store $MailboxPass $StoreEmailOU $EcommSharedMailboxOU $DomainController $arrUserTemplates $Mailbox1 $Mailbox2 $Mailbox3
我需要它在 $arrUserTemplates 的值上通过 foreach 循环传递变量,因为我随后会使用此函数构建的所有内容(其中还包括一个开关)来运行 New-ADUser:
New-ADUser -Name $MailboxUser -SamAccountName $MailboxUser -UserPrincipalName $UPN `
-DisplayName $DisplayName -Description $Desc -Enabled $True `
-AccountPassword (ConvertTo-SecureString -AsPlainText $MailboxPass -Force) `
-ChangePasswordAtLogon $False -PasswordNeverExpires $PasswordNeverExpires -CannotChangePassword $CannotChangePassword `
-Path $OU -Server $DomainController
【问题讨论】:
-
'这 [显示] "arrUserTemplates: " 三次。' - 这对我来说似乎是预期的。为什么它会在循环中使用 $arrUserTemplates 以外的东西?
-
好吧,让我们从
$arrUserTeamplates开始,其中有一个额外的“a”。接下来,我想你想要的是Write-Host "arrUserTemplates: $MailboxUser"。 -
$arrUserTemplates= @($Mailbox1, $Mailbox2, $Mailbox3)
-
@user2864740 大多数情况下,我这样做是为了看看会发生什么。我希望它会...实际上,由于 TheMadTechnician 指出的内容,该测试无效。
-
@TheMadTechnician 我在这个例子中打错了 $arrUserTemplates。我不得不消毒。它在我的脚本中拼写正确。我在 Write-Host 中进行了更改,并且 $MailboxUser 仍然为空
标签: arrays powershell switch-statement