我有一个Powershell函数,该函数循环遍历数组并将属性填充到新的Exchange / Office 365组。最近提出的挑战是将某些文本仅添加到inputObject的某些属性之前。
这是尝试添加文字之前的核心工作功能:
$allObjects = @(Get-ChildItem -path c:\tmp\json\*.json | Get-Content -Raw | ConvertFrom-Json)
function Import-UnixDL2Group {
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
$InputObject
)
Process{
New-UnifiedGroup -Alias $InputObject.alias `
-DisplayName $InputObject.displayname `
-Members $InputObject.members.recipients.value `
-PrimarySmtpAddress $InputObject.emailaddresses.value `
}
}
$allObjects | Import-UnixDL2Group
因此,前置文本需要在Import-UnixDL2Group函数之前或之中出现。
我尝试在主函数中的-alias和-displayname设置中添加“ gr-” +,但这不起作用:
function Import-UnixDL2Group {
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
$InputObject
)
Process{
New-UnifiedGroup -Alias "gr-" + $InputObject.alias `
-DisplayName "gr-" + $InputObject.displayname `
-Members $InputObject.members.recipients.value `
-PrimarySmtpAddress $InputObject.emailaddresses.value `
}
}
我试图创建一个新功能只是为了添加文本:
function prependGR {
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
$InputObject
)
Process {
"gr-" + $InputObject.alias
}
}
$allObjects | prependGR
prependGR函数产生正确的结果,但不适用于主要的Import-UnixDL2Group函数。
在过程中添加另一个变量并调用prependGR函数只会产生gr-,而不会附加实际变量:
Process{
$renameAlias = $InputObject.alias | prependGR
New-UnifiedGroup -Alias $renameAlias `
我一直在尝试在主函数中添加其他参数,但没有成功。
任何指导将不胜感激。
提前谢谢!
答案 0 :(得分:1)
要使诸如"gr-" + $InputObject.alias
之类的表达式被识别为(单个,求值的)命令自变量,必须将其括在(...)
中:
New-UnifiedGroup -Alias ("gr-" + $InputObject.alias) ...
或者,将"..."
字符串与字符串插值(字符串扩展)一起使用:
New-UnifiedGroup -Alias "gr-$($InputObject.alias)" ...
请注意,需要将嵌入的$InputObject.alias
表达式 封装在$(...)
中(对于纯变量引用则不需要,例如{{1 }}-有关字符串扩展规则的概述,请参见我的this answer。
答案 1 :(得分:0)
怎么样
New-UnifiedGroup -Alias $("gr-$InputObject.alias") `
-DisplayName $("gr-$InputObject.displayname") `
-Members $InputObject.members.recipients.value `
-PrimarySmtpAddress $InputObject.emailaddresses.value `