从源脚本结束函数而不退出脚本

时间:2018-10-31 17:24:21

标签: windows powershell

我有一个脚本,其中包含许多其他脚本。每个来源的脚本都有一个功能。

我的一个功能需要根据if语句停止。我尝试了在互联网上看到的continue,break,throw和evrything,但是我的主要脚本完全结束了,或者我的功能继续了。

功能代码:

function AutoIndus-DeployUser($path){

    $yaml=Get-Content $path | ?{!$_.StartsWith("#")}

    $UsersPwd=$false

    $user="";$password="";$groups="";$description=""; $options=""

    $yaml | %{

        if (($_-match "}") -and ($UsersPwd -eq $true)){Write-Host "function should stop"; return}

        *actions*
    }
}

主脚本:

#functions list and link to extern scripts
Get-ChildItem -Path $PSScriptRoot\functions\ | %{$script=$_.Name; . $PSScriptRoot\functions\$script}

myfunction-doesnotwork

*some code*

编辑:我看到return应该在不停止脚本其余部分的情况下停止该函数,不幸的是它根本不会停止任何操作:

输出:

Config file found 

 --- 

Changing user _usr-dba password 

Changing user _usr-dba2 password 

function should stop
Changing user _usr-dba3 password 

function should stop
function should stop
function should stop
function should stop
function should stop
Disabling user DisableAccounts:{ 

Disable-LocalUser : User DisableAccounts:{ was not found.
At C:\Scripts\AWL-MS-AUTOMATION_AND_TOOLS\functions\AutoIndus-DisableAccount.ps1:25 char:13
+             Disable-LocalUser -Name $disable
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (DisableAccounts:{:String) [Disable-LocalUser], UserNotFoundException
    + FullyQualifiedErrorId : UserNotFound,Microsoft.PowerShell.Commands.DisableLocalUserCommand

Disabling user _usr-dba 

为帮助您理解,我的脚本读取了一个文件,并根据其正在读取的每一行进行操作。它在遇到User{之类的东西时开始起作用,而在遇到}之类的东西时应该停止,_usr-dba3不在弯曲的括号之内,因此不应该处理。这样,我所有其他功能都使用同一个文件。 (更改用户密码和禁用用户是两个不同的功能/源脚本)

就像您可以看到return不能完成任务一样,也许我在使用return时遗漏了一点,但是我现在不明白。

2 个答案:

答案 0 :(得分:1)

要在功能结束之前过早退出该功能,请使用

  

返回

它的工作原理类似于break,它将停止执行,但是它不会返回整个线程,而是返回到调用该函数的行下方。

还请记住,如果您的函数具有输出集,则return将返回它,例如,使用以下函数:

  

函数Get-ReturnValue()   {

     

$ returnValue =“这是我的输出”

     

返回$ returnValue

     

}

如果您这样称呼它:

  

$ receivedReturnValue = Get-ReturnValue

然后,变量receivedReturnValue将与函数的输出一起加载。

答案 1 :(得分:0)

我需要一个快速的解决方案,所以我更改了功能,现在没有返回/继续/ ...但是值变成了真。将其初始化为false,并在该值等于false时对每条yaml行执行操作。


编辑:所以最后的问题是我没有正确使用功能。只有在返回另一个函数时,Return才有效。因此,我几乎将整个sctipt放入了一个调用AutoIndus-DeployUser函数的函数中。现在可以正常使用了!