在编写Powershell脚本时,我必须对它运行两次,以使所做的任何更改生效,以使函数内部的代码生效。有什么建议么?

时间:2018-09-06 19:24:38

标签: powershell visual-studio-2013 powershell-ise

就像标题所示,当我在Visual Studio 2013或Powershell ISE中编写Powershell脚本时。如果我对脚本进行了更改,则在我运行该脚本时,所做的更改要等到第二次运行后才能应用。不只是变量,还有整行代码。

以下是产生问题的示例代码:

Write-Output "Code Updates";
Test;

Function Test{      
    Write-Output "Code Doesn't Update";
}

如果您同时在两个Write-Output命令中都更改了文本,则第一次运行时只有函数外部的文本会更新。

关于为什么发生这种情况的任何建议吗?

3 个答案:

答案 0 :(得分:0)

Powershell脚本仅从上至下读取。我必须先声明该函数,然后再调用它。

答案 1 :(得分:0)

是的,您要在没有时间重新声明功能并获取更改之前调用该功能。

在测试时,您可以突出显示该功能并按F8键(在ISE中)以重新声明该功能,而不必重新运行整个脚本。

最佳实践表明,在执行任何逻辑之前,您应该先将功能置于顶部。将功能放在模块文件中,然后将模块导入第一行。

问候,埃德沃利。

答案 2 :(得分:0)

您不能使用不存在的代码。您说您正在使用Visual Studio 2013,这意味着您是开发人员类型或正在尝试成为开发人员类型。函数就像Visual Studio引用/库一样。除非先加载并实例化引用/库,否则不能使用它。

脚本语言自上而下阅读,自上而下加载操作。

以后要与其他代码块相关的操作使用的任何代码,例如函数或模块及其公开的函数和方法,必须首先加载。

如果要使用任何PowerShell cmdlet,则必须先加载其模块,并因此加载其关联方法,函数,类等

您编写的任何自定义函数必须是脚本加载/读取的第一件事。

有关其他指南,请参见以下内容。

  

设计PowerShell功能使其可重用

     

以下是我在编写函数时要考虑的几件事   可以重用:

     

•功能应简短而优美。函数应该做一件事   并做得很好。如果您的功能是实现多层   关于处理和逻辑,您应该将其分解为   较小的功能。除了参数和注释,我建议   函数的主体很少应该超过10或12   代码行。如果比这更长,请问问自己是否采取了步骤   可以进一步细分。

     

•函数应该是流水线友好的。   函数应该从管道中获取输入对象,然后编写   对象到管道。可重用函数永远不要使用   写主机,除非您正在编写专门用于格式化的函数   一些特殊格式。记住,输出的东西   未将Write-Host放入管道中。

     

•明智地使用参数。   参数通常应始终具有默认值。例如,一个   Get函数应始终返回一个值。参数可以用来   允许用户筛选cmdlet的输出。想想如何   获取流程有效。您可以指定一个特定的过程,但如果这样做   不,他们都被退回了。在编写函数时,您   声明变量,您应该问问自己这是否是   最终用户可能想要更改。如果是这样,请提供一个良好的默认值   大多数人都会使用,但如果最终用户愿意,则允许最终用户对其进行更改   至。

     

•应该正确命名函数。确保您使用   可接受的动词和经过深思熟虑的名词来实现您的功能。如果你   遵守这些标准,其他人将更容易纳入   您的功能纳入他们的代码。而且,它将使您的功能更多   可发现的,最终用户将对期望的结果有一个很好的了解   当他们看到您的功能名称时。

     

https://blogs.technet.microsoft.com/heyscriptingguy/2011/05/20/design-your-powershell-functions-to-be-reusable

     

Windows PowerShell:构建更好的功能   https://technet.microsoft.com/en-us/library/hh360993.aspx