在PowerShell中封装数组中的字符串

时间:2014-12-30 16:32:32

标签: arrays powershell

由于第8层问题,我需要在Exchange中设置邮箱委派权限。我已经编写了我的第一个功能PowerShell脚本来为我做这个,除了可怕的

之外,一切都很好

-GrantSendOnBehalfTo

我很困惑,直到我意识到只有我的数组中的姓氏获得了权限,所以我发现当你运行命令时它会清除所有现有的条目。

假设Bob代表Joe的邮箱发送,Ben也需要它。我跑

Set-Mailbox -Identity Joe -GrantSendOnBehalfTo Ben

Ben会得到它而Bob会失去它。

所以我挖了一下,发现你可以在一个命令中提供多个用户,这样就可以了,格式如下:

Set-Mailbox -Identity Joe -GrantSendOnBehalfTo  @{Add="Bob", "Ben"}

所以我想传递一些列表构建的数组:

function test-Array($mailbox) {
    $target= Get-Content .\list\$list.txt
    Set-Mailbox -Identity $mailbox -GrantSendOnBehalfTo @{Add=$target}
}

这显然会失败,因为$ target的输出是:

Bob Ben

所以我的问题是:我如何追加字符串以便它们如下?

"Bob", "Ben",

我试过了

$separator = "", ""
[string]::Join($separator,$target)

但由于PowerShell是邪恶的,它不会将"视为我的分隔符的一部分。

很抱歉看起来很傻。我环顾四周,不能为我的生活搞清楚。

分辨率:

$separator = '", "'
$tgt= [string]::Join($separator,$target)
$tgt = $tgt + '"'
$tgt = $tgt.Insert(0,'"')

OR

$separator = '", "'
$target= $target -replace '^|$','"' -join ','

2 个答案:

答案 0 :(得分:3)

不幸的是,只设置分隔符只会在元素之间设置引号。它会错过第一个和最后一个引用。

$target = 'Bob','Ben'

$target -replace '^|$','"' -join ','

"Bob","Ben"

答案 1 :(得分:2)

function test-Array($mailbox){
     $target= Get-Content .\list\$list.txt
     Foreach($User in $Target){
          Set-Mailbox -Identity $mailbox -GrantSendOnBehalfTo @{Add=$User}
     }
}