首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PowerShell中,如何将一个充满变量的数组传递给函数?

在PowerShell中,如何将一个充满变量的数组传递给函数?
EN

Stack Overflow用户
提问于 2019-12-17 06:20:43
回答 1查看 151关注 0票数 0

我正在编写一个脚本,如果我可以将一个数组($arrUserTemplates= $Mailbox1, $Mailbox2, $Mailbox3)传递到一个函数中,那么这个脚本会变得更容易,但是我似乎不能理解它。我使用Param($arrUserTemplates, $Mailbox1, $Mailbox2, $Mailbox3)传递var,但是脚本似乎忽略了它,并且没有传递$arrUserTemplates中的变量。

这可能会重现这个问题(函数很长,里面有一个开关):

代码语言:javascript
复制
$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循环传递变量,因为我将使用这个函数构建的所有东西(其中还包括一个开关)来运行一个新的ADUser:

代码语言:javascript
复制
  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
EN

回答 1

Stack Overflow用户

发布于 2019-12-19 03:06:38

因此,这里的主要问题是在定义$Mailbox1$Mailbox2$Mailbox3之后定义$arrUserTemplates。如果您想通过更改引用的变量的值来更改$arrUserTemplates的值,那么这就是关键所在……[ref]类型。如果您首先创建变量,即使具有$null值,也可以在创建数组时将它们指定为引用变量,然后在以后更改变量的值时,数组将反映更改,而无需进一步干预。例如,下面的代码:

代码语言:javascript
复制
$Mailbox1,$Mailbox2,$Mailbox3 = $null
$arrUserTemplates = [ref]$Mailbox1,[ref]$Mailbox2,[ref]$Mailbox3

"arrUserTemplates initial value:"
$arrUserTemplates

$Mailbox1 = 'Mailbox1'
$Mailbox2 = 'Mailbox2'
$Mailbox3 = 'Mailbox3'

"arrUserTemplates final value:"
$arrUserTemplates

将创建以下输出:

代码语言:javascript
复制
arrUserTemplates initial value:

Value   
-----   



arrUserTemplates final value:
Mailbox1
Mailbox2
Mailbox3

这表明数组中变量的值是空的,然后在我更改变量之后,数组中的值将被更新以匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59365085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档