Я положил -TotalCount 2
, чтобы захватить Вторую строку, это правильно - верно?
Нет: -TotalCount
(чьи псевдонимы -First
и -Head
) указывает количество строк, которые нужно прочитать (начало) файла.
Если в вашем файле есть хотя бы 2 строки,
$compname = (Get-Content -path .\0CONFIGURATION.txt -TotalCount 2)
Поэтому
будет хранить массив из 2 элементов ([object[]]
) в $compname
, и, учитывая, что Rename-Computer
(разумно) принимает только одиночное имя компьютера через его параметр -NewName
, вы получите сообщение об ошибке, которое вы видели.
Получение одной строки из файла:
Для smalli sh Для файлов самый простой, но несколько расточительный подход состоит в том, чтобы Get-Content
прочитать все строк ввода в массив и затем просто индексировать в этот массив (подход Sid ):
# Line with (0-based) index *1* is the *2nd line.
# Note: Convenient, but reads the entire file first.
$compname = (Get-Content -path .\0CONFIGURATION.txt)[1]
A более эффективный, но все еще потенциально расточительный подход , который также является самым быстрым вариантом в этом случай (короткий t вызова. NET методов напрямую):
# Collect only the first 2 lines in an array, then
# use [-1] to grab the *last* line from that array, which is by
# definition the 2nd one.
$compname = (Get-Content -path .\CONFIGURATION.txt -First 2)[-1]
самый экономичный, но самый медленный подход заключается в передаче по каналу Select-Object
и использовании параметр (0
)
-Index
:
# Selects (outputs) only the line with index 1, i.e. the 2nd line.
# This is most memory-efficient, because by using the pipeline
# the lines preceding the line of interest merely *stream*
# (are processed one by one), without the need to first *collect them in an array*.
$compname = Get-Content -path .\CONFIGURATION.txt | Select-Object -Index 1
Получение нескольких строк из файла - по диапазону и / или отдельные индексы:
Обратите внимание, что -Index
опционально поддерживает массив индексов для поддержки , возвращая несколько строк , используя ..
оператор диапазона (чисел / символов) в этом примере:
$lines2and3 = Get-Content -path .\CONFIGURATION.txt | Select-Object -Index (1..2)
оператор индекса PowerShell, [...]
, обеспечивает такую же гибкость :
$lines2and3 = (Get-Content -path .\CONFIGURATION.txt)[1..2]
Вы можете даже объединить несколько диапазонов и отдельные индексы, используя выражения для указания индексов:
# Get line 2, as well as lines 4 - 6.
# Note the need for unary `,` if the expression starts with a *single* index.
# You wouldn't need that if the expression starts with an array; e.g.:
# `3..5 + 1` or `3, 4, 5 + 1`
Get-Content -path .\CONFIGURATION.txt | Select-Object -Index (, 1 + 3..5)
# Ditto.
(Get-Content -path .\CONFIGURATION.txt)[, 1 + 3..5]