Предположим, у меня есть ряд команд:
# foo.ps1
do-this
do-that
do-something-totally-different
etc.
Далее, я хочу избавиться от необходимости писать это в активной оболочке (потому что это изменяет мою среду оболочки), поэтому в bash я бы просто написал:
cat foo.ps1 | xargs -I arg eval arg
Или что-то вдоль этих линий.
Как добиться того же эффекта с помощью Windows PowerShell?
решение1
Чтобы запустить файл скрипта в текущей области, а не в новой, используйтеточка-сорсинг:
. .\foo.ps1
В качестве альтернативы вы можете использовать эквивалент Invoke-Expression
PowerShell eval
, что будет точно таким же, как если бы вы ввели команды в командной строке самостоятельно:
Get-Content .\foo.ps1 -Raw | Invoke-Expression
Или более кратко:
gc .\foo.ps1 -raw | iex