【问题标题】:Powershell Remove-Variable cmdlet, do I need to call it at the end of each function/scriptblock?Powershell Remove-Variable cmdlet,我需要在每个函数/脚本块的末尾调用它吗?
【发布时间】:2021-04-17 04:57:49
【问题描述】:

这是一个通用问题,没有代码。 不确定我是否需要删除局部变量,因为我认为它应该由 Powershell 引擎完成。 我有一个从 WMI 收集信息的脚本并使用了很多局部变量。多次运行时输出混乱,但在我清理函数/脚本块末尾的所有局部变量后,它得到了修复。

任何想法/想法将不胜感激。

【问题讨论】:

  • 没有代码和上下文很难评论。当 powershell 主机关闭或重新定义变量时,变量将被删除。如果您在编辑器中运行代码,它们可能会被保留,直到您重新启动编辑器..
  • 代码示例肯定会有所帮助。一般情况下,您无需致电Remove-Variable。确保初始化所有代码路径中的变量,例如。 G。如果您没有在 if 语句之前初始化变量 $foo(或者在 else 分支中设置变量),请不要执行类似 if(condition){ $foo = 42 } 的操作。如果您尝试读取未初始化的变量,请使用 Set-StrictMode 让 PowerShell 抛出错误。
  • 感谢你们的帮助。 Set-StrickMode 真的很有帮助。

标签: powershell variables scope garbage-collection


【解决方案1】:

问题不在于您没有删除 var,而是至少来自两个初学者错误(或者由像我这样的懒惰的开发者完成,假设我是开发者)。

  1. 我们忘记在使用之前初始化我们的变量。
  2. 我们不会测试函数或 CmdLets 调用的每个返回。

完成这两件事后(代码至少乘以 2),您可以重新启动脚本,而无需清理除已处理数据之外的任何内容。

对我来说,脚本大部分时间是在桌子的一角完成的,甚至不会推送到源存储库中。

所以开始编写脚本,少问自己一些问题。

【讨论】:

  • 感谢您的回答,JPBlanc。
  • 在使用 Powershell 时,保持 C/C++ 的好习惯仍然是必要的。我会记住这一点。
猜你喜欢
  • 2019-07-03
  • 2014-02-28
  • 1970-01-01
  • 2017-03-28
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多