在不退出脚本的情况下结束源脚本中的函数



我有一个包含许多其他脚本的脚本。每个来源的脚本都有一个函数。

我的一个函数需要根据if语句停止。我试着继续,打破,投掷,每次我在网上看到,但要么我的主要脚本完全结束,要么我的功能继续。

功能代码:

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 $PSScriptRootfunctions | %{$script=$_.Name; . $PSScriptRootfunctions$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:ScriptsAWL-MS-AUTOMATION_AND_TOOLSfunctionsAutoIndus-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-db3超出了不应该处理的曲线括号。这样,我的所有其他函数都使用同一个文件。(更改用户密码和解散用户是两种不同的功能/来源脚本(

就像你可以看到退货并没有起到它的作用,也许我在退货的使用中遗漏了一点,但我现在不明白。

要在函数结束前提前退出,请使用

返回

它的工作方式类似于中断到它将停止执行的位置,但它不会停止整个线程,而是返回到您调用函数的下一行。

还要记住,如果你的函数有一个输出集,返回会将其返回,例如下面的函数:

函数Get-ReturnValue(({

$returnValue="这是我的输出">

return$returnValue

}

如果你这样称呼它:

$receivedReturnValue=获取返回值

则变量receivedReturnValue将与函数的输出一起加载。

我需要一个快速的解决方案,所以我更改了我的函数,现在没有返回/content/。。。而是一个变为真的值。它被初始化为false,当值等于false时,对每个yaml行执行操作。


编辑:所以最后的问题是我没有正确使用函数。返回仅在返回到另一个函数时有效。因此,我将几乎整个sctipt放入一个函数中,该函数调用AutoIndus DeployUser函数。现在它工作得很完美!

最新更新