Прочитать массив из файла - PullRequest
1 голос
/ 17 июня 2020

У меня есть массив, хранящийся в файле следующим образом:

  @(@(@("a","b"),@("aa","bb")),@(@("a","b"),@("a","b","c")))

Когда я пытаюсь прочитать файл с помощью:

 $var = Get-Content -Path  "PATH" 

, я получил строку вместо множественного массива .

 $var.GetType 

Возвращает:

 IsPublic IsSerial Name                      BaseType 
 -------- -------- ----                      --------
 True     True     String                    System.Object

Как мне получить $var в виде массива?

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Учитывая тот факт, что вы хотите получить из файла, вы можете просто использовать PowerShell Dot-Sourcing :

$var = . .\array.ps1

(обратите внимание, что расширение должно быть .ps1, иначе запустится любое приложение, связанное с расширением)

Если вы ищете безопасный способ для импорта массива, вы также можете использовать Import-LocalizedData:

$var = Import-LocalizedData -FileName array.psd1

См. Также: Как безопасно читать файлы PowerShell .PSD1

1 голос
/ 17 июня 2020

С invoke-Expression вы можете сделать это очень просто.

$array_string = '@(@(@("a","b"),@("aa","bb")),@(@("a","b"),@("a","b","c")))'
$array = Invoke-Expression $array_string
$array.GetType() #System.Array
$array

invoke-Expression выполняет любую строку как код PowerShell. Но вы должны стараться избегать этого, это плохая практика. Вот почему я спросил:

не могли бы вы дать какой-то контекст того, чего вы пытаетесь достичь? Вы сами писали файл? Какую информацию вы в нем храните?

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