首页 > 解决方案 > PowerShell (Get-Content -Path "Config.txt" -TotalCount ($aVariable + 2)[-1]) 得到 2 行而不是 1 行

问题描述

首先很抱歉,我不知道如何提出这个问题。

我目前正在研究一个 PowerShell 脚本,该脚本应该读入 config.txt 文件以配置稍后在脚本中使用的变量。

我现在遇到的问题是一行代码看起来像:

$Var1 = Get-Content -Path "Config.txt" -TotalCount ($LineCounterVar + 2)[-1]

我重命名了变量,所以我不必解释整个上下文

现在来解释我认为它应该做什么,我将制作一个我用来测试它的有形示例:

假设$LineCounterVar的值为'1'。然后我认为它只会获取第2行的内容并将其填充到变量$Var1中。这应该是命令末尾的[-1]的原因,正如我从互联网研究中了解到的那样,仅获取最后一行的内容。那是在使用参数-TotalCount获取所有内容直到行$LineCounterVar + 2之后。

我的问题是......它没有。此行获取第一行和第二行的内容并从中生成一行。例如,如果我的Config.txt看起来像这样:

1.
XdhXX-XzuXX-XznXX-casXX-XX56X
Admin
Computername
J

(不管这意味着什么)

然后$Var1的输出如下所示:

  1. XdhXX-XzuXX-XznXX-casXX-XX56X

但在我对剧本的看法中,情况不应该如此。它实际上应该输出:

XdhXX-XzuXX-XznXX-casXX-XX56X

我还有更多类似的代码行,例如:

$Var2 = (Get-Content -Path "Config.txt" -TotalCount ($LineCounterVar + 3))[-1]
$Var3 = (Get-Content -Path "Config.txt" -TotalCount ($LineCounterVar + 4))[-1]
$Var4 = (Get-Content -Path "Config.txt" -TotalCount ($LineCounterVar + 5))[-1]

这些都可以正常工作。他们只得到他们应该得到的行的内容。

有人可以帮助我和/或向我解释为什么它不能按我想要的方式工作吗?

标签: powershellfile-get-contents

解决方案


这个

$Var1 = Get-Content -Path "Config.txt" -TotalCount ($LineCounterVar + 2)[-1]

最终与此相同,因为总和只是一个 1 的数组。

$Var1 = Get-Content -Path "Config.txt" -TotalCount ($LineCounterVar + 2)

我不知道你为什么不把多余的括号放在底部:

$Var1 = (Get-Content -Path "Config.txt" -TotalCount ($LineCounterVar + 2))[-1]

如果您甚至需要额外的 var,这可能是一种更简单的方法。

$file = get-content config.txt

$var1 = $file[1] # second line
$var2 = $file[2]
$var3 = $file[3]
$var4 = $file[4]

或者

$var1,$var2,$var3,$var4 = $file[1..4]

现在换一个陌生的方法:

switch (get-content config.txt) { 
  { $_.readcount -eq 2 } { $var1 = $_ }
  { $_.readcount -eq 3 } { $var2 = $_ }
  { $_.readcount -eq 4 } { $var3 = $_ }
  { $_.readcount -eq 5 } { $var4 = $_ }
}

甚至

get-content config.txt | set-variable -name {'var' + ($_.readcount - 1) }
get-childitem variable:var*

Name                           Value
----                           -----
var0                           1.
var1                           XdhXX-XzuXX-XznXX-casXX-XX56X
var2                           Admin
var3                           Computername
var4                           J

推荐阅读