Как я могу автоматически очистить переменные в сценарии в PowerShell ISE?

2

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

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

Есть ли способ настроить PowerShell ISE для работы в этом направлении, более похожим на настоящую консоль PowerShell?

Iszi
источник

Ответы:

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.

BartekB
источник