仅在Powershell函数中的某些变量之前添加文本

时间:2018-07-13 18:10:16

标签: powershell office365

我有一个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 `

我一直在尝试在主函数中添加其他参数,但没有成功。

任何指导将不胜感激。

提前谢谢!

2 个答案:

答案 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 `