Импорт файла .txt с вложенным массивом в powershell - PullRequest
0 голосов
/ 08 ноября 2018

Редактирование информации: я хочу создать файл .txt, который содержит вложенный массив, подобный приведенному ниже формату, где я могу получить имя виртуальной машины и дни, в которые я хочу сделать резервную копию. У меня работает скрипт резервного копирования вручную, но я хочу вытащить переменные имени виртуальной машины из массива в сценарий, ЕСЛИ это день, когда он должен работать. Сценарий резервного копирования запускается через 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 голосов
/ 09 ноября 2018

[править - я разместил не ту версию. спасибо Джонатону Краудеру за то, что он указал, что 2-й день не был добавлен в таблицу поиска.]

кажется, это делает то, что я думаю вы действительно хотите ... получить имена виртуальных машин для тех, с которыми нужно иметь дело в определенный день.

я думаю это то, что вы хотите. [ ухмылка ]

# 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

это вывод строка , а не массив. поэтому вам нужно разделить и обрезать его, чтобы получить отдельные элементы виртуальной машины. у оригинала был массив, но я не был уверен, как вы хотите использовать данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...