首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我需要清理每个循环之间的运行空间--如何整理我的脚本?

我需要清理每个循环之间的运行空间--如何整理我的脚本?
EN

Stack Overflow用户
提问于 2012-03-31 18:56:46
回答 2查看 5.7K关注 0票数 0

我有一个很好的剧本。它相当复杂,做了许多“事情”。我的问题是当我把整个1000行脚本放到一个时间循环中时.

我的一些/许多变量是加倍的,每个循环都搞砸了..

这当然是因为我在同一个运行空间中运行脚本。那我该怎么办?在脚本末尾用remove-variable删除所有变量?还是有什么神奇的东西可以让我在每一次跑步之间清理我的运行空间?

我觉得我把事情弄得乱七八糟,我需要某种扫描仪来告诉我是否有任何不必要的元素/变量。我还在学习的早期阶段,这个剧本一直伴随着我“一路”,所以它绝不是好的编码。

那么,在我的情况下,什么才是“最佳实践”呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-01 03:13:52

可以将类似的内容添加到作业的初始化脚本中:

代码语言:javascript
代码运行次数:0
运行
复制
 $sysvars = get-variable | select -Expand name

  function remove-uservars {
     get-variable |
       where {$sysvars -notcontains $_.name} |
         remove-variable
    }

然后在while循环的顶部,点源remove-uservars函数:

代码语言:javascript
代码运行次数:0
运行
复制
. remove-uservars

应该删除脚本在每个循环开始之前创建的所有变量。

票数 1
EN

Stack Overflow用户

发布于 2012-03-31 22:03:06

如果每次从干净的“作用域”开始就足够了,那么尝试如下:

代码语言:javascript
代码运行次数:0
运行
复制
while (<loop_condition>)
{
    & {
        ... 1000 lines of script 
    }
}

每次执行上面的"1000行脚本“时,您都会得到一个新的作用域,因此该作用域的局部变量需要重新初始化。如果您的脚本设置全局变量或脚本变量(例如$global:foo$script:bar ),则此方法可能无法工作(取决于您是否希望全局/脚本更改在循环迭代之间持久存在)。

下面(诚然是人为的示例)演示了如何创建一个新的作用域,每次创建一个新的“局部变量”变量:

代码语言:javascript
代码运行次数:0
运行
复制
PS> while (1) { $local += 10; Start-Sleep -milli 500; $local }
10
20
30
40
PS> while (1) { & {$local += 10; Start-Sleep -milli 500; $local} }
10
10
10
10

如果您真的需要一个全新的运行空间(干净的全局变量和脚本变量),那么您可以开始一个作业,这将使您每次在循环中都有一个新的运行空间,但是perf并不是那么好:

代码语言:javascript
代码运行次数:0
运行
复制
while (<loop_condition>)
{
    $job = Start-Job { <path to 1000 line script> }
    Wait-Job $job
    Receive-Job $job
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9958740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档