【问题标题】:Duplication of actions on arrays数组上的重复操作
【发布时间】:2021-07-19 18:46:41
【问题描述】:

我正在编写一个脚本来根据不同的参数清点计算机。在脚本的其中一个部分中,我需要添加有关收到 CSV 文件的地区的信息。 为了在每个数组的开头添加一个属性,我编写了一个函数:

function Add-LocationProperty ($Array, $LocationName)
{
    $Array | ForEach-Object {$_ | Add-Member -MemberType NoteProperty -Name Location -Value "$LocationName"}

    $OrderSelection = @()
    $OrderSelection += $Array[0].PSObject.Properties.Name[-1]
    $OrderSelection += $Array[0].PSObject.Properties.Name | Select-Object -SkipLast 1
    $Array = $Array | Select-Object $OrderSelection
    
    Return $Array
}

$IpConfCSV = Add-LocationProperty -Array $IpConfCSV -LocationName $LocationName
$OSCSV = Add-LocationProperty -Array $OSCSV -LocationName $Location.Name
$SoftCSV = Add-LocationProperty -Array $SoftCSV -LocationName $LocationName
$CPUcsv = Add-LocationProperty -Array $CPUcsv -LocationName $LocationName
$RAMcsv = Add-LocationProperty -Array $RAMcsv -LocationName $LocationName
$DiskCSV = Add-LocationProperty -Array $DiskCSV -LocationName $LocationName
$SMBcsv = Add-LocationProperty -Array $SMBcsv -LocationName $LocationName

从代码中您可以看到我对每个数组应用了相同的操作。有什么方法可以缩短代码,例如,通过使用循环? 下面的代码不起作用:

$IpConfCSV, $OSCSV, $SoftCSV, $CPUcsv, $RAMcsv, $DiskCSV, $SMBcsv | ForEach-Object {$ = Add-LocationProperty -Array $ -LocationName $LocationName}

【问题讨论】:

    标签: arrays powershell loops


    【解决方案1】:

    1.) 你的意思可能是$_

    $IpConfCSV, $OSCSV, $SoftCSV, $CPUcsv, $RAMcsv, $DiskCSV, $SMBcsv | ForEach-Object { Add-LocationProperty -Array $_ -LocationName $LocationName}
    

    注意:在循环内分配$_ 不会改变原始对象。之后你会处理结果。

    2.) 或者,使用 foreach 关键字

    foreach ($item in ($IpConfCSV, $OSCSV, $SoftCSV, $CPUcsv, $RAMcsv, $DiskCSV, $SMBcsv)) {
        Add-LocationProperty -Array $item -LocationName $LocationName
    }
    

    3.) 如果您在函数中添加管道支持,您可以让您的生活更加轻松:

    filter Add-LocationProperty
    {
        param (
            [Parameter(Mandatory, ValueFromPipeline)]
            $Array,
            [Parameter(Mandatory, Position = 0)]
            $LocationName
        )
        ...
    }
    
    $IpConfCSV, $OSCSV, $SoftCSV, $CPUcsv, $RAMcsv, $DiskCSV, $SMBcsv | Add-LocationProperty $LocationName
    

    (请注意,我现在已将其设为filter

    【讨论】:

    • marsze,感谢您的帮助!是的,我的意思是$_。我尝试了您建议的两个选项,但现在我在输出中得到了数组,最后附加了 location 属性。该函数应该在数组的开头添加一个属性。
    猜你喜欢
    • 2011-07-23
    • 2015-02-12
    • 2018-11-08
    • 2016-03-20
    • 2011-12-29
    • 2019-07-15
    • 2021-11-12
    • 2020-01-15
    相关资源
    最近更新 更多