创建一个通过Powershell循环的函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建一个通过Powershell循环的函数相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个循环遍历json文件的函数,并根据遇到的特定条件希望将json键的值添加到数组中,但无法完成此操作。

以下是json:

$a1 = [    {
        "name": "sachin",
        "surname": "",
    },
    {
        "name": "Rajesh",
        "surname": "Mehta"

    }
]

和我创建的函数如下:

function addingkeyval
{
param ($key,
        [Array]$tobeaddedarr)

$a1 | Select-Object -Property name,surname | ForEach-Object {
    if($_.$key-eq "")
    {
    }
    else
    {     
    $tobeaddedarr +=$_.$key+","
    }
}

}

当我使用以下语句校准此函数时:

$surnamearr = @()
addingkeyval -key surname -tobeaddedarr $surnamearr

i want the output in the array $surnamearr as below
("Mehta")

以某种方式我无法在数组中添加值,任何人都可以帮助我实现相同的目的

答案

如果只需要一个姓氏,可以这样做。

$a1 = '[    
    {
        "name": "sachin",
        "surname": "",
    },
    {
        "name": "Rajesh",
        "surname": "Mehta"

    }
]'

$Json = $a1 | ConvertFrom-Json
$Surnames = $Json | 
    Where-Object { $null -ne $_.surname -and ![string]::IsNullOrEmpty($_.surname) } | 
    Select-Object -ExpandProperty surname
另一答案
$surnamearr = @((ConvertFrom-Json $a1).surname) -ne ''
  • [ConvertFrom-Json $a1将JSON数组转换为PowerShell自定义对象的数组(类型[pscustomobject])。

  • [(...).surname使用.surname提取结果数组中对象的所有member enumeration属性的值。

  • @(...)确保将结果视为数组(如果$a1中的数组恰好只包含one元素,则不会)。

  • [-ne ''从结果数组中过滤出所有空字符串元素(以LHS为数组,比较运算符,例如-ne充当数组过滤器,而不是返回布尔值)。] >

  • 结果是$surnamearr是一个包含所有非空.surname属性值的数组。

以上是关于创建一个通过Powershell循环的函数的主要内容,如果未能解决你的问题,请参考以下文章

创建片段而不从 java 代码实例化它

将目录文件夹名称存储到阵列 Powershell

如何使用引导程序和 for 循环在 django 中创建电影片段?

Powershell 为目录制作一个函数并在末尾添加一个前缀

在再次循环或循环结束之前,Powershell输出不会显示

创建自己的代码片段(CodeSnippet)