我有一个脚本,其中包含许多其他脚本。每个来源的脚本都有一个功能。
我的一个功能需要根据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时遗漏了一点,但是我现在不明白。
答案 0 :(得分:1)
要在功能结束之前过早退出该功能,请使用
返回
它的工作原理类似于break,它将停止执行,但是它不会返回整个线程,而是返回到调用该函数的行下方。
还请记住,如果您的函数具有输出集,则return将返回它,例如,使用以下函数:
函数Get-ReturnValue() {
$ returnValue =“这是我的输出”
返回$ returnValue
}
如果您这样称呼它:
$ receivedReturnValue = Get-ReturnValue
然后,变量receivedReturnValue将与函数的输出一起加载。
答案 1 :(得分:0)
我需要一个快速的解决方案,所以我更改了功能,现在没有返回/继续/ ...但是值变成了真。将其初始化为false,并在该值等于false时对每条yaml行执行操作。
编辑:所以最后的问题是我没有正确使用功能。只有在返回另一个函数时,Return才有效。因此,我几乎将整个sctipt放入了一个调用AutoIndus-DeployUser函数的函数中。现在可以正常使用了!