我目前有一系列的Dyanmic通讯组,要在其中编辑收件人筛选器。我们公司的地址是4位数字。该号码是动态通讯组的显示名称的一部分...示例webcontact_1234_DG .... 1234将是4位数字的中心号码。我想替换收件人过滤器以使其具有office -eq(1234),但要从显示名称中提取该数字。所有显示名称的位数都必须与4位中心数字之前的字符相同,例如,webcontact_1234_DG,webcontact_2345_DG,webcontact_3456_DG等。
我有一个替换代码,但是它将办公室位置更改为空。
这是我正在使用的代码:
$groups=Get-DynamicDistributionGroup -filter {alias -like "webcontact*"}
foreach ($group in $groups) {
$locationcode=$($group.alias).tostring.replace("\\D", "")
set-dynamicdistributiongroup $group -recipientfilter {((((office -eq $locationcode) -and
(have the recipent filter here but can't display due to confidential information) -and
(RecipientType -eq 'UserMailbox') -and
(-not(RecipientTypeDetails -eq 'RoomMailbox')) -and
(-not(RecipientTypeDetails -eq 'SharedMailbox'))))}
}
答案 0 :(得分:0)
最简单的方法是使用-split
运算符从值中提取数字(文本) [1] :
$locationcode = ($group.Alias -split '_')[1]
-split '_'
返回将输入字符串除以_
个字符而得到的标记数组,而[1]
返回第二个标记,这是所需的位置号。
简单的例子:
PS> ('webcontact_3456_DG' -split '_')[1]
3456
或者,您自己尝试的更正版本(请参见下文)将使用 -replace
运算符:
PS> 'webcontact_3456_DG' -replace '\D' # remove all non-digit chars.
3456
关于您尝试过的事情:
$($group.alias).tostring.replace("\\D", "")
[string]
类型的.Replace()
通过 literal 字符串搜索,因此在您的姓名中搜索\\D
将会失败,并且不会进行替换
`
(反引号),而不是\
,因此\
不需要转义:在PowerShell "\\D"
中实际上变成了\\D
。顺便说一句:通常不需要在表达式两边加上$(...)
。
[1]在这种简单情况下,您也可以使用[string]
类型的.Split()
.NET 方法,但是使用I suggest using the far more flexible -split
PS operator as a matter of habit。
答案 1 :(得分:0)
根据给定的信息,这是我可以提供的最佳答案。我假设您在从webcontact_1234_DG
中获取该数字时遇到问题,我将使用正则表达式将这些数字输入另一个变量。
$locationcode = [regex]::Match($group.alias,'^[^_]+_([^_]+)_[^_]+$').Groups[1].Value
上面的代码将抓住两个下划线之间的所有内容。
尝试一下,让我知道。