【问题标题】:Sitecore Powershell Function piped ID string to piped Name stringSitecore Powershell 函数管道 ID 字符串到管道名称字符串
【发布时间】:2018-03-30 00:03:09
【问题描述】:

尝试创建一个通用函数,该函数可以接受带有 ID 的管道字符串并将其转换为带有名称的管道字符串。下面的代码只返回数组中的第一项。我错过了什么?

function Get-ValuesfromID($item){
        [String[]]$allItems = $item -split "\|"
        foreach($item in $allItems)
        {
            $nameofid = (Get-Item master:\ -ID $item).Name
            $namedlist = $nameofid -join "\|"
            return $namedlist
        }
}


@{Label="Tag List"; Expression={Get-ValuesfromID($_.Tags)}}

【问题讨论】:

    标签: powershell sitecore


    【解决方案1】:

    您的 return 语句位于 foreach 循环内。把它移到外面,你应该没事的。 (这就是为什么缩进很重要)

    function Get-ValuesfromID($item) {
        [String[]]$allItems = $item -split "\|"
    
        foreach($item in $allItems) {
            $nameofid = (Get-Item master:\ -ID $item).Name
            $namedlist = $nameofid -join "\|"
        }
        return $namedlist  # outside foreach loop
    }
    

    【讨论】:

    • 感谢您的修复。似乎 -join "|"没有附加,但它正在替换值。我只是通过返回变量中的 foreach 获得最后一次。
    【解决方案2】:

    不要在foreach 循环中使用return - 它会退出封闭的函数/脚本。

    退出循环需要break;但是,您的意图似乎是收集循环迭代中的所有值,因此最简单的方法是将整个 foreach 语句包含在 $(...) 中并将 -join 应用于结果数组:

    function Get-ValuesfromID ($item){
    
        [String[]] $allItems = $item -split '\|'
    
        $(foreach($item in $allItems) {
          (Get-Item master:\ -ID $item).Name
        }) -join '\|'        
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      相关资源
      最近更新 更多