有朋友问他编辑脚本时,喜欢在PowerShell ISE编辑器中操作,写一段,执行一段。可是时间长了当前会话中的变量很多,有的时候可能会影响某段脚本的输入和输出,能不能把自定义变量给删除掉,他尝试用过Get-Variable | Remove-Variable -Force,但是这样太暴力,可能会把PowerShell中的自动化变量给更改掉,他唯一想到的就是关闭ISE,重新打开个新的ISE,但是这样更蛋疼了。
分析:PowerShell专门提供了管理变量的命令Get-Variable和Remove-Variable,这里唯一需要处理的是如何把自定义变量给排除掉。我暂时能想到的就是增加白名单:
- 打开一个干净的ISE把自定义变量名导出(用下面第一段脚本)。
- 下次删除时利用白名单排除列表中的变量。
获取自动化变量白名单的脚本:
"@({0})" -f ((Get-Variable | select -ExpandProperty name | foreach { "'$_'" }) -join ",`n")
删除自定义变量的脚本:
Function Clear-ISEVariable { $sysVar=@( '$', '?', '^', 'args', 'ConfirmPreference', 'ConsoleFileName', 'DebugPreference', 'Error', 'ErrorActionPreference', 'ErrorView', 'ExecutionContext', 'false', 'FormatEnumerationLimit', 'HOME', 'Host', 'InformationPreference', 'input', 'LASTEXITCODE', 'MaximumAliasCount', 'MaximumDriveCount', 'MaximumErrorCount', 'MaximumFunctionCount', 'MaximumHistoryCount', 'MaximumVariableCount', 'MyInvocation', 'NestedPromptLevel', 'null', 'OutputEncoding', 'PID', 'profile', 'ProgressPreference', 'PSBoundParameters', 'PSCommandPath', 'PSCulture', 'PSDefaultParameterValues', 'PSEmailServer', 'PSHOME', 'psISE', 'PSScriptRoot', 'PSSessionApplicationName', 'PSSessionConfigurationName', 'PSSessionOption', 'PSUICulture', 'psUnsupportedConsoleApplications', 'PSVersionTable', 'PWD', 'ShellId', 'StackTrace', 'true', 'VerbosePreference', 'WarningPreference', 'WhatIfPreference') Get-Variable -Scope 1 | Where-Object { $sysVar -notcontains $_.Name } | Remove-Variable -Scope 1 -Force }
备注:
- Clear-ISEVariable函数同样适用于控制台,因为ISE中的自动化变量基本上是兼容控制台的。
- 每一台机器上的Profile文件可能不尽相同,最安全的方式是先得到自己机器上的自动化变量白名单,更新一下脚本中的集合,然后再运行。
本文链接: https://www.pstips.net/clear-isevariable.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!