将具有嵌套数组的.txt文件导入Powershell

时间:2018-11-08 20:28:24

标签: powershell

信息编辑:我想构建一个.txt文件,其中包含嵌套数组,如以下格式,在其中可以提取VM的名称以及要备份的日期。我有一个手动备份脚本,但是如果要在运行的那一天,我想将阵列中的VM名称变量放入脚本中。备份脚本作为预定任务通过Powershell运行。

我有一个.txt文件,其中包含以下格式的信息:[[VM1],[Monday, Thursday]]

我想以以下格式将其导入powershell并引用数组值:$ file [1],$ file [2]等...在每行的for循环内。在PowerShell中这可能吗我也可以使用import-csv尝试此操作,但是它运行时没有错误,但是什么也不输出。

$Sched = import-csv -path ".\Schedule.txt"
$VMNames = ""
Write-Host $Sched
foreach ($i in $Sched)

{

    $VMNames = $i[0]
    Write-Host $VMNames
}

在此示例中,我希望$ i [0]输出VM1。

1 个答案:

答案 0 :(得分:0)

[编辑-我发布了错误的版本。感谢Jonathon Crowder指出第二天没有添加到查找表中。]

这似乎可以完成我实际上想做的事情……获取应在指定日期处理的VM名称。

认为就是您想要的。 [咧嘴]

# fake reading in a text file
#    in real life, use Get-Content
$InStuff = @'
[[VM1],[Monday, Thursday]]
[[VM2],[Sunday]]
[[VM3],[Wednesday, Saturday]]
[[VM5],[Monday, Thursday]]
[[VM6],[Tuesday, Friday]]
'@ -split [environment]::NewLine

$DayNames = (Get-Culture).DateTimeFormat.DayNames
$DailyLookup = @{}
foreach ($DN_Item in $DayNames)
    {
    $DailyLookup.Add($DN_Item, '')
    }

foreach ($IS_Item in $InStuff)
    {
    # forgot to trim out the leftover space on the 2nd day name
    #$SplitIS_Item = $IS_Item.Split(',').Trim('[]')
    $SplitIS_Item = $IS_Item.Split(',').Trim('[]').Trim()
    $VMName = $SplitIS_Item[0]
    # forgot to include all the _remaining_ items
    #    this left out the 2nd day name
    #$TriggerDays = $SplitIS_Item[1]
    $TriggerDays = $SplitIS_Item.Where({$_ -ne $VMName})

    foreach ($TD_Item in $TriggerDays)
        {
        $DailyLookup[$TD_Item] = (($DailyLookup[$TD_Item], $VMName) -join ', ').Trim(', ')
        }
    }

$DailyLookup['Monday']

输出...

VM1, VM5

该输出是一个 string ,而不是一个数组。因此,您需要对其进行拆分和修剪以获取各个VM项目。原来那里有一个数组,但是我不确定您想如何使用数据。