2013-09-26 3 views
6

Я пишу сценарии PowerShell с помощью Windows PowerShell ISE. Когда я изменяю someting в скрипте и запускаю скрипт, выполняется не последняя сохраненная версия скрипта, а старшая. Только если я запустил скрипт во второй раз, он использует текущую версию. Что я могу сделать, чтобы всегда запускать новую версию скрипта?Windows PowerShell ISE работает в старой версии

ответ

1

После внесения изменений вам необходимо снова запустить сценарий, используя точечный поиск. Если у вас есть файл с именем MyScript.ps1 в текущем каталоге, в консоли вы выполните команду ниже:

. .\MyScript.ps1 

Если вы хотите, чтобы вызвать определенную функцию в сценарии, то вы можете просто сделать:

. .\MyScript.ps1 
MyFunction 
1

Это очень старый вопрос, но я думаю, что я наткнулся на эту же проблему. В моем случае я определил функцию после ее вызова. Он работает, но только потому, что «myfunc» по-прежнему имеет значение из предыдущего вызова. Если вы измените «Hello, World!», Вы обнаружите, что новое значение влияет только на вторую попытку.

Invoke-Command -ScriptBlock ${function:myfunc} 

function myfunc() { 
    Write-Host "Hello, World!" 
} 

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

function myfunc() { 
    Write-Host "Hello, World!" 
} 

Invoke-Command -ScriptBlock ${function:myfunc} 
0

Мой опыт работы с ISE "кэширование" старых файлов:

Поведение ISE отличается для PS модулей (.psm1) и простые PS скрипты (PS1). Я использую PS & ISE с Win10Pro.

A) Мой опыт работы с модулями (PSM1)

  1. загрузить модуль файл "hello.psm1" уже установлен в соответствующем модуле каталог «C:. \ Users \ MyUserName \ Documents \ WindowsPowerShell \ Modules \ Hello»по ISE
  2. выполнить функцию "Run Selection"(вы не можете выполнить модули, "Run Script")
  3. Измените файл, например, вывод функции «Write-Host» Hello World! »на« Write-Host »« Hello »и сохраните файл .
  4. Выполните функцию «Выполнить выбор», и она будет выполнять старую функцию со старым выходом, например. "Привет мир!". Это также верно , если я повторяю команду «Выполнить выбор».
  5. Просто, если я покину ISE и снова загрузите его, новая функция будет выполнена с помощью команды «Выполнить выбор».

B) Опыт работы со сценариями (.PS1).

  1. Если я выполняю «Run Selection», то такое же поведение, как и с модулями.
  2. Если я выполнил один раз «Запустить сценарий» и тем самым вызывается функция, выполняется текущая версия функции. Конечно, я вызываю функцию (например, на линии номер 100) в файле «после», она определена (например, в строках 10-20). Таким образом, нет кеширования.
  3. Особенно, если я выполняю один раз «Запустить сценарий», а исполняемый код не вызывает функцию, а затем выполняет мою функцию «Выполнить выбор», выполняется текущая версия функции.

C) Вот мой обходной путь, чтобы сделать развитие модуль более удобным:

  • Простые сценарии могут быть выполнены "Run Script".
  • Если я хочу разработать модуль (.PSM1), я называю его простым скриптом (.PS1) на этапе разработки. Я помещаю файл (например, «hello.ps1») уже в в соответствующую папку модуля, например. «C: \ Users \ MyUserName \ Documents \ WindowsPowerShell \ Modules \ Hello» для модуля «Привет». Конечно, этим я не могу выполнять функции как функции модуля из консоли PowerShell. Я просто хочу использовать ISE для вызова функций для тестирования.
  • Поскольку модули не выполняются как сценарий, в файле нет исполняемого кода, а просто функции (AFAIK). Поэтому я могу безопасно выполнить «Run Script» в моем скрипте.

Так что, если я модифицирую файл модуля в рамках разработки ISE, я всегда сначала выполняю «Run Script», прежде чем выполнять функцию «Run Selection».

При этом я всегда выполняю текущую версию функции.

Хотя моя проблема была немного иной, этот вопрос и ответы были очень полезны для меня, чтобы найти решение. Трудно найти такие вопросы об «кешировании» ISE и столь полезных ответах.

С уважением Rolf