Powershell (Get-Content -Path "Config.txt" -TotalCount ($ aVariable + 2) [- 1]) получает 2 строки вместо одной - PullRequest
2 голосов
/ 17 января 2020

Прежде всего, извините, я не знаю, как сформулировать этот вопрос.

В любом случае, я сейчас работаю над сценарием PowerShell, который должен прочитать файл config.txt для настройки. Переменные, которые позже используются в скрипте.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что строка кода выглядит примерно так:

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

Я переименовал переменные, поэтому я не надену Не нужно объяснять весь контекст

Теперь, чтобы объяснить, что я думал, что он должен делать, я собираюсь сделать реальный пример, который я использовал для его проверки:

Скажем так $ LineCounterVar имеет значение '1' . Тогда я подумал, что он получит только содержимое строки 2 и заполнит ее переменной $ Var1 . Это должно быть причиной [- 1] в конце команды, которая , как я понял из моего исследования inte rnet , указывает только на получение содержимого Последняя линия. То есть после получения всего контента до строки $ LineCounterVar + 2 с параметром -TotalCount .

Моя проблема в том, что ... нет. эта строка получает содержимое первой и второй строки и делает из нее одну строку. Например, если мой 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]

Все это прекрасно работает. Они получают только содержание той строки, которую должны.

Может ли кто-нибудь помочь мне и / или объяснить мне, почему это не работает так, как я хочу?

1 Ответ

1 голос
/ 18 января 2020

Это

$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]

Это может быть проще, если вам даже нужны дополнительные переменные.

$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
...