【问题标题】:Read an array from a file从文件中读取数组
【发布时间】:2020-06-17 07:44:47
【问题描述】:

我有一个数组存储在一个文件中,如下所示:

  @(@(@("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 作为数组获取?

【问题讨论】:

  • 你能给出一些你想要达到的目标的背景吗?文件是你自己写的吗?您在其中存储了哪些信息?
  • 就用PowerShell Dot-Sourcing:$var = . C:\path\array.ps1
  • 如果您要保存配置参数,请考虑将 Import-ClixmlExport-Clixml cmdlet 用于本机 Powershell 对象(反)序列化。

标签: arrays powershell


【解决方案1】:

考虑到您想从文件中检索,您可以简单地使用PowerShell Dot-Sourcing

$var = . .\array.ps1

(注意扩展名必须是.ps1,否则会启动任何与扩展名关联的应用程序)

如果您正在寻找a safe way 来导入数组,您也可以使用Import-LocalizedData

$var = Import-LocalizedData -FileName array.psd1

另请参阅:How to read PowerShell .PSD1 files safely

【讨论】:

  • 我学到了一些新东西 :) 我有点搞砸了,我有一些 @Ayoub 的 cmets:扩展名必须是 psd1,所以他需要先重命名他的文件.它还为文件 -BaseDirectory 和 -FileName 使用 2 个参数,因此您不能在文件名中指定完整路径。
【解决方案2】:

使用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 代码执行。 但是您应该尽量避免使用它,这是一种不好的做法。这就是我问的原因:

你能给出一些你想要达到的目标的背景吗?你是否 自己写文件?您在其中存储了哪些信息 是吗?

【讨论】:

  • 我正在尝试从存储在文件中的数组中获取信息。我想直接做,不需要传递信息并自己创建数组
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
相关资源
最近更新 更多