如何阻止Powershell扁平参数的锯齿状数组?

时间:2018-04-30 02:28:23

标签: powershell powershell-v5.0

我创建了一个哈希表,表示我正在从

中提取数据的文件的结构
# schema of the data stored in the file
$RecordSchema = @{
    Header = @(
        @("EmployerName",       2, 30)
        @("ApplicableMonth",    32, 6)
        @("EmployerIDNumber",   38, 10)
    )
}

# function to extract data from the file based on the $schema
function Map-Field ($row, $schema) {
    $mappedRow = @{}
    foreach ($field in $schema) {
        $fieldName = $field[0]
        $fieldPosition = $field[1]
        $fieldSize = $field[2]

        $value = $row.Substring($fieldPosition, $fieldSize)
        $mappedRow[$fieldName] = $value
    }

    [PSCustomObject]$mappedRow
}

function Set-RecordHeader($record, $recordRaw) {
    $record["Header"] = Map-Field $recordRaw[0] $RecordSchema["Header"]
    $record
}

当我运行脚本时,$schema会获得我已通过的架构$RecordSchema.Header的扁平版本。

我在参数$RecordSchema["Header"]之前添加了逗号,但我得到了一个单项数组数组,该项包含我传递的模式的扁平版本。

$record["Header"] = Map-Field $recordRaw[0] (,$RecordSchema["Header"]) 

1 个答案:

答案 0 :(得分:0)

我刚刚发现由于某种原因,我需要在每个数组的末尾添加一个逗号

$RecordSchema = @{
    Header = @(
        @("EmployerName",       2, 30), # this
        @("ApplicableMonth",    32, 6), # and other comma matter
        @("EmployerIDNumber",   38, 10)
    )
}

我通过运行以下

来验证它
$a = @(
    @(1, 2, 3)
    @(4, 5, 6)
)

$b = @(
    @(1, 2, 3),
    @(4, 5, 6)
)

$a.Length # returns 6
$b.Length # returns 2

我认为PowerShell会认为传递新行意味着另一个条目: - (