Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 我需要清理每个循环之间的运行空间-如何整理脚本_Powershell - Fatal编程技术网

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

Powershell 我需要清理每个循环之间的运行空间-如何整理脚本,powershell,Powershell,我有一个很好用的剧本。它相当复杂,做了很多“事情”。。当我将整个1000行脚本放入while循环时,问题就开始了 我的一些/许多变量在每个循环中都会加倍并弄乱。 这当然是因为我在相同的运行空间中运行脚本。。那么,我该怎么办?在脚本末尾使用remove variable删除我的所有变量?还是有什么神奇的东西可以让我在每次跑步之间清空我的跑步空间 我觉得我把事情搞得乱七八糟,我需要某种扫描仪来告诉我是否有任何不需要的函数/变量。。我还处于学习的早期阶段,这个脚本一直伴随着我,所以它绝对不是好的编码

我有一个很好用的剧本。它相当复杂,做了很多“事情”。。当我将整个1000行脚本放入while循环时,问题就开始了

我的一些/许多变量在每个循环中都会加倍并弄乱。

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

我觉得我把事情搞得乱七八糟,我需要某种扫描仪来告诉我是否有任何不需要的函数/变量。。我还处于学习的早期阶段,这个脚本一直伴随着我,所以它绝对不是好的编码

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

如果每次都从一个干净的“范围”开始就足够了,那么尝试以下方法:

while (<loop_condition>)
{
    & {
        ... 1000 lines of script 
    }
}
如果您真的需要一个全新的运行空间(干净的全局变量和脚本变量),您可以启动一个作业,这样每次循环都会得到一个全新的运行空间,但性能不会那么好:

while (<loop_condition>)
{
    $job = Start-Job { <path to 1000 line script> }
    Wait-Job $job
    Receive-Job $job
}
while()
{
$job=开始作业{}
等待作业$Job
接收Job$Job
}
如果每次都从一个干净的“范围”开始就足够了,那么尝试以下方法:

while (<loop_condition>)
{
    & {
        ... 1000 lines of script 
    }
}
如果您真的需要一个全新的运行空间(干净的全局变量和脚本变量),您可以启动一个作业,这样每次循环都会得到一个全新的运行空间,但性能不会那么好:

while (<loop_condition>)
{
    $job = Start-Job { <path to 1000 line script> }
    Wait-Job $job
    Receive-Job $job
}
while()
{
$job=开始作业{}
等待作业$Job
接收Job$Job
}

您可以在作业的初始化脚本中添加如下内容:

 $sysvars = get-variable | select -Expand name

  function remove-uservars {
     get-variable |
       where {$sysvars -notcontains $_.name} |
         remove-variable
    }
然后在while循环的顶部,点源remove uservars函数:

. remove-uservars

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

您可以在作业的初始化脚本中添加如下内容:

 $sysvars = get-variable | select -Expand name

  function remove-uservars {
     get-variable |
       where {$sysvars -notcontains $_.name} |
         remove-variable
    }
然后在while循环的顶部,点源remove uservars函数:

. remove-uservars

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

嗨,巴特!为什么要编辑我的问题?也许所有1000行不需要在循环中运行?:-)最好的做法是将它分解成更小的脚本,并(或在推送时)显式初始化变量。某种明确的运行空间操作可以解决问题,在一次运行中您可能会遇到相同的问题。这是我在所有服务器上执行的服务器扫描,因此它非常广泛且需要,是的:)肯定是一个设计问题。作为短期解决方案,您可以使用
remove Variable-Name var1、var2、var3
删除在每个循环结束时导致问题的变量。作为一个长期的解决方案,开始分析你的1000行代码都在做什么,并找到一些可以分解成可重用函数的东西。作为一种最佳实践,您希望争取模块化的、可重用的代码,以便能够快速导入到其他项目中,而不是一块具有许多相互依赖性的代码块,这限制了可重用性。嗨,巴特!为什么要编辑我的问题?也许所有1000行不需要在循环中运行?:-)最好的做法是将它分解成更小的脚本,并(或在推送时)显式初始化变量。某种明确的运行空间操作可以解决问题,在一次运行中您可能会遇到相同的问题。这是我在所有服务器上执行的服务器扫描,因此它非常广泛且需要,是的:)肯定是一个设计问题。作为短期解决方案,您可以使用
remove Variable-Name var1、var2、var3
删除在每个循环结束时导致问题的变量。作为一个长期的解决方案,开始分析你的1000行代码都在做什么,并找到一些可以分解成可重用函数的东西。作为一种最佳实践,您希望争取模块化的、可重用的代码,以便快速导入到其他项目中,而不是一块具有许多相互依赖性的代码块,这会限制可重用性。Fanrastic!这正是我要寻找的:)但是为什么我要点源函数呢?要影响全局作用域?您可以点源它以影响当前作用域(可能是全局作用域,也可能不是全局作用域)。Fanrastic!这正是我要寻找的:)但是为什么我要点源函数呢?若要影响全局范围,请点源以影响当前范围(可能是全局范围,也可能不是全局范围)。