Когда вы используете составную строку без кавычек в качестве аргумента команды, PowerShell неявно обрабатывает ее как расширяемую строку , т. Е. Как если бы она была передана в двойных кавычках ("..."
)
Этот ответ предоставляет исчерпывающий обзор расширяемых строк (интерполяция строк) в PowerShell.
Соответствующий аспект заключается в том, что a :
после ссылка на переменную, такая как $RADARRIP
, считается часть ссылки на эту переменную : часть между $
и :
считается именем (PowerShell) диска и то, что следует , :
, как ожидается, будет именем или путем элемента на этом диске; то есть ссылка на переменную интерпретируется как экземпляр нотации пространства имен PowerShell .
Следовательно, PowerShell следует явно указать, что :
после $RADARRIP
является не часть ссылки на переменную , для которой у вас есть несколько опций:
- Самый вариант PowerShell-idiomati c заключается в использовании
{...}
для определения переменной name:
Invoke-WebRequest -Uri http://${RADARRIP}:$RADARRPORT/api/movie/$radarr_movie_id ...
- В качестве альтернативы, используйте
`
, escape-символ PowerShell, для экранирования :
, чтобы рассматривать его как литерал :
Invoke-WebRequest -Uri http://$RADARRIP`:$RADARRPORT/api/movie/$radarr_movie_id ...
- Наконец, цитирование
:
тоже выборочно работает, как показано в ваш собственный ответ ; однако, хорошая привычка к формированию - использовать одинарное -цитирование ('...'
) для строк, которые должны использоваться буквально (дословно), то есть если интерполяция строки не необходимо:
Invoke-WebRequest -Uri http://$RADARRIP':'$RADARRPORT/api/movie/$radarr_movie_id ...