5

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

PS C:\> $a = 'hello'
PS C:\> $a
hello
PS C:\> $b = '$a world!'
PS C:\> $b
$a world!

Теперь я действительно хочу, чтобы $ b возвратил «Hello World»!'но я, очевидно, не могу вызвать переменную внутри другой переменной, как это. У кого-нибудь есть предложения или обходные пути? Я чувствую, что я просто упускаю что-то очевидное здесь.

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

PS C:\> $selHost = (get-content c:\scripts\hosts.txt)[0]
PS C:\> $selhost
spr-it-minion
PS C:\> $a = (get-content c:\scripts\config.txt)[1]
PS C:\> $a
$selhost Is Offline!
PS C:\> $b = "$a"
PS C:\> $b
$selhost Is Offline!

Поэтому я вытаскиваю первую строку из hosts.txt и устанавливаю для нее значение $ selhost, которое просто «spr-it-minion». Затем я вытаскиваю вторую строку из config.txt, которая является просто строкой: $ selhost не в сети!'в надежде, что когда я позвоню $ a, я получу' spr-it-minion не в сети!и я не уверен, что делать.

Редактировать II: содержимое hosts.txt и config.txt соответственно.

HOSTS.TXT:

spr-it-minion
spr-saflok
spr-crosby
spr-vmhost01
spr-vmhost02
spr-vmhost03

config.txt:

172.31.1.124
$selhost Is Offline!
$selhost Is Offline!
example@company.com
example2@company.com

Редактировать III: Pastebin к моему действительному сценарию, если кто-то из вас заинтересован.

Строка 15: я установил $ alertSubject в строку "$ selhost не в сети!"без кавычек или чего-либо.

Строка 82: я использую $ alertSubject в качестве строки темы оповещения по электронной почте, надеясь, что эта переменная будет иметь свое значение, например: «spr-it-minion вне форума!«но когда я получаю электронное письмо или пытаюсь написать-host $ alertSubject в любом месте скрипта, он просто говорит:« $ selhost не в сети!"

1 ответ1

7

При определении переменных в PowerShell одинарные кавычки (') означают, что вы хотите буквальную версию строки. Используйте двойные кавычки ("), если вы хотите разрешить расширение переменной:

PS C:\> $a = "hello"
PS C:\> $a
hello
PS C:\> $b = "$a world!"
PS C:\> $b
hello world!

Больше информации:

Редактировать после комментариев:

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

Самый простой способ (IMO) - использовать метод Replace ; что-то вроде:

$selHost = (get-content c:\scripts\hosts.txt)[0]
$a = ((get-content c:\scripts\config.txt)[1]).replace('$selhost', $selHost)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .