2

При работе в обычной консоли PowerShell переменные, созданные в сценарии, будут автоматически очищаться при завершении сценария, если они не расширены до более широкой области. Однако, похоже, что это не относится к консоли в PowerShell ISE. После того, как я запустил скрипт, его переменные сохраняются, хотя по умолчанию они должны быть ограничены областью действия скрипта.

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

Есть ли способ настроить PowerShell ISE, чтобы в этом отношении он работал как настоящая консоль PowerShell?

1 ответ1

2

Есть проблема с F5 - он на самом деле не запускает ваш скрипт, а использует точечный источник. Я создал функцию + разделенную привязку клавиш, чтобы обойти. Это часть более крупного проекта, над которым я работал (ISEFun на codeplex). Более короткая версия (которая сохранит существующий скрипт и преобразует "без названия" в блок скрипта):

$InvokeScript = {
    if ($file = $psISE.CurrentFile) {
        if (Test-Path $file.FullPath) {
            if ($file.FullPath -match '\.ps1$') {
                if (! $file.IsSaved) {
                    $file.Save()
                }
                # Script - we run it...
                & $file.FullPath
            }
        } else {
            & ([scriptblock]::Create($file.Editor.Text))
        }
    }
}

$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add(
    "Invoke script",
    $InvokeScript,
    'F4'
)

Теперь вы можете использовать F4 вместо F5 и поддерживать чистоту сессии. Чтобы получить его каждый раз, вы можете просто добавить его в свой скрипт $ profile.

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