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

问题描述 投票:0回答:3

就像标题所示,当我在Visual Studio 2013或Powershell ISE中编写powershell脚本时。如果我对脚本进行了更改,当我运行它时,我所做的更改在我第二次运行之前不会应用。不仅仅是变量,还包括整行代码。

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

Write-Output "Code Updates";
Test;

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

如果更改了“写入 - 输出”命令中的文本,则只有第一次运行时函数外部的文本才会更新。

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

powershell visual-studio-2013 powershell-ise
3个回答
0
投票

Powershell脚本只是从上到下阅读。我必须首先声明函数然后调用它。


0
投票

是的,在有时间重新声明函数并获取更改之前,您正在调用该函数。

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

最佳实践表明,在任何逻辑之前,您应该具有顶级功能。将函数放在模块文件中并导入第一行的模块。

此致,Edwoli。


0
投票

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

脚本语言自上而下读取并自上而下加载操作。

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

如果要使用任何PowerShell cmdlet,则必须加载其模块及其关联方法,函数,类等(首先在内存中)

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

有关其他指导,请参阅以下内容

设计您的PowerShell函数是可重用的

以下是我尝试思考的一些事情,因为我正在编写一个可重用的函数:

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

•功能应该是管道友好的。函数应从管道中获取输入对象,并将对象写入管道。可重用的函数永远不应该使用Write-Host,除非您正在编写一个专门用于格式化某些特殊格式的函数。请记住,使用Write-Host输出的内容不会放入管道中。

•明智地使用参数。参数通常应始终具有默认值。例如,Get函数应始终返回值。参数可用于允许用户过滤cmdlet的输出。想想Get-Process是如何工作的。您可以指定特定进程,但如果不指定,则返回所有进程。当您编写函数并声明变量时,您应该问自己这是否是最终用户可能想要更改的内容。如果是这样,请提供大多数人将使用的良好默认值,但允许最终用户根据需要进行更改。

•功能应正确命名。确保为您的功能使用可接受的动词和深思熟虑的名词。如果您遵守这些标准,则其他人可以更轻松地将您的功能合并到他们的代码中。此外,它将使您的功能更容易被发现,最终用户将很好地了解当他们看到您的功能名称时会发生什么。

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

© www.soinside.com 2019 - 2024. All rights reserved.