首页 > 解决方案 > 仅将文本附加到 Powershell 函数中的某些变量

问题描述

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

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

任何指导将不胜感激。

先感谢您!

标签: powershelloffice365

解决方案


对于诸如被识别为(单个,评估的)命令参数的表达式,您必须将其括在:"gr-" + $InputObject.alias(...)

New-UnifiedGroup -Alias ("gr-" + $InputObject.alias) ...

或者,使用"..."带有字符串插值的字符串(字符串扩展):

New-UnifiedGroup -Alias "gr-$($InputObject.alias)" ...

请注意需要将嵌入的$InputObject.alias 表达式包含在其中(仅变量引用$(...)不需要,例如- 请参阅我的这个答案以了解字符串扩展规则的概述)。"I'm $HOME"


推荐阅读