Powershell从文本文件中检索变量

时间:2012-09-11 10:56:13

标签: powershell

有没有办法读取文本文件C:\ test.txt并检索特定值?

即文件如下所示:

serverName=serv8496
midasServer=serv8194

我想以某种方式从我的脚本中设置变量的值,例如:

$MidasServer= (from file midasServer value)

我不知道引用所在的行号。

有什么办法吗?

3 个答案:

答案 0 :(得分:17)

是,读取文件,拆分每一行并将拆分结果分配给名称和值参数:

Get-Content file.txt | Foreach-Object{
   $var = $_.Split('=')
   New-Variable -Name $var[0] -Value $var[1]
}

答案 1 :(得分:7)

如果这正是您的文件显示的方式,即用等号表示的键值对列表,那么您应该看一下ConvertFrom-StringData

  

将包含一个或多个键和值对的字符串转换为哈希表。因为每个键/值对必须在一个单独的行上,所以here-strings通常用作输入格式。

因此,如果文本文件仅包含示例中的数据,则可以执行此操作以创建哈希表

$Path = "C:\temp\test.txt"
$values = Get-Content $Path | Out-String | ConvertFrom-StringData
$values.midasServer

$values.midasServer的值为serv8194。无需知道属性相对于文件的位置。您的输入文件也可以在等号周围具有不同的前导和尾随空格,这将给出完全相同的结果。

根据您的使用情况,您可以更进一步,并从该哈希表中创建自定义对象

New-Object -TypeName pscustomobject -Property $values

如果您至少拥有PowerShell v3或更高版本,则可以简化该过程(假设您需要自定义的psobject)

$values = [pscustomobject](Get-Content $Path -Raw | ConvertFrom-StringData)
$values.midasServer

答案 2 :(得分:0)

这是对Shay Levy答案的改进。它执行以下操作。

  1. 它会在之前忽略file.txt中的注释行和换行 开始处理文件。所以它解决了说那个名字的错误 无法创建,因为它是一个空字符串。
  2. 仅在首次出现字符“ =”时拆分。 因此,您可以在值字段中使用任何字符。
  3. 它执行Trim()操作以便从变量/属性的开头和结尾删除空格字符。因此,file.txt中的“ VARIABLE = VALUE”和“ VARIABLE = VALUE”返回相同的结果。
  4. 将新变量的范围设置为“脚本”。在中创建的变量 脚本作用域只能在脚本文件或模块中访问 它们是在其中创建的。其他选项是Global,Local和Private。 您可以找到变量作用域引用here
Get-Content file.txt | Where-Object {$_.length -gt 0} | Where-Object {!$_.StartsWith("#")} | ForEach-Object {

    $var = $_.Split('=',2).Trim()
    New-Variable -Scope Script -Name $var[0] -Value $var[1]

}