信息编辑:我想构建一个.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。
答案 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项目。原来那里有一个数组,但是我不确定您想如何使用数据。