Тип строки, вероятно, является самой популярной переменной в PowerShell. Не думаю, что я когда-либо писал скрипт, в котором не было бы хотя бы одной строки. Строки отлично подходят для определения простого набора символов, как имя компьютера, путь к текстовому файлу, путь к ключу реестра, URL и так далее. Расширяя переменные внутри строк и используя возможности форматирования строк PowerShell, вы можете делать практически что угодно.
Строки определяются путем заключения одного или нескольких символов в одинарные или двойные кавычки, как:
Определение строк таким образом просто, но вскоре вы обнаружите, что вам нужно получить значение переменной внутри строк.
Например, возможно, у вас есть скрипт с параметром ComputerName
и в вашем скрипте вам нужно конкатенировать стандартный префикс к нему, как SRV-, как показано ниже.
Теперь значение переменной $ComputerName
– SRV-URANUS, но включение $ComputerName
в строку в двойных кавычках – это только один из способов вставки переменных в строки. Есть несколько разных способов сделать это. Давайте посмотрим на два примера.
Расширение строк
Первый метод, с которым вы, вероятно, уже знакомы, называется расширением строк, или просто расширением переменных внутри существующих строк. Это самый распространенный способ отображения значения переменной в строке.
Для этого требуется поместить переменную внутри строки в двойных кавычках. Одинарные кавычки не работают, потому что они воспринимают все символы буквально.
Например, возможно мне нужно указать путь к файлу. Я знаю базовый путь к папке, но еще не знаю фактического имени файла. Я мог бы создать переменную с именем $FullPath
и статически ввести путь к папке, но сделать имя файла переменным.
Что если вам нужно указать свойство объекта внутри строки? Это выглядит немного по-другому. В этом случае мне нужно обернуть свойство в скобки и добавить знак доллара спереди. Это называется оператором подвыражения. Это говорит PowerShell сначала развернуть значение.
Расширение строки очень распространено, но что, если у вас есть более сложная строка?
Использование оператора форматирования строк PowerShell
Еще один способ гарантировать вставку значений переменных в ваши строки – это через оператор форматирования PowerShell (-f
).
Используя оператор форматирования, вам не нужно помещать переменную или свойство в строку, окруженную двойными кавычками. Вы можете создать строку в одинарных кавычках и указать переменные, которые будут вставлены в эту строку за ее пределами, как показано ниже.
Вы можете видеть, что это имеет точно такой же эффект. Хотя на этот раз вам не пришлось использовать двойные кавычки или беспокоиться о заключении свойства объекта в скобки и еще один знак доллара. Это выглядит немного чище, но может быть сложнее понять. Использование оператора форматирования заставляет вас заменить {0}
на $File.Name
в вашем уме.
Для добавления других переменных просто увеличивайте свои метки на 1 и продолжайте добавлять переменные, разделенные запятыми, к оператору форматирования. Пока позиция индекса оператора форматирования соответствует позиции метки в строке, вы можете добавлять столько ссылок, сколько захотите.
Когда использовать оператор форматирования?
I usually prefer to place variables inside of the string and expand them because I don’t have to match an index with a value. However, there are exceptions, as in the case of special characters that must be escaped.
Например, предположим, вам нужно выполнить утилиту командной строки, которой требуется передать имя файла. Этот путь к файлу может содержать пробелы, поэтому вам нужно будет заключить эту ссылку в двойные кавычки. Без этих двойных кавычек утилита.exe не сможет правильно интерпретировать аргумент файла.
Теперь предположим, что вы хотите сделать это в сценарии PowerShell. Если вы используете расширяемые строки, это будет выглядеть немного неряшливо, потому что вам придется использовать обратную косую черту для экранирования двойных кавычек.
Теперь давайте получим тот же результат с помощью оператора форматирования.
I don’t have to use any escape characters. This may seem like a simple example but as soon as you come across large strings that require a lot of escaping you will soon see the real benefit of using the format operator!
Резюме
В следующий раз, когда вам придется заменять переменные внутри строки, подумайте, какой метод будет наиболее читаемым. Это сэкономит вам время в долгосрочной перспективе.
Для получения дополнительных сообщений, связанных с работой со строками, обязательно посмотрите Подстрока PowerShell: Поиск строки внутри строки и Переменные PowerShell в строках.
Source:
https://adamtheautomator.com/powershell-string-format/