Завершить функцию из исходного скрипта без выхода из скрипта - PullRequest
0 голосов
/ 31 октября 2018

У меня есть сценарий со многими другими источниками сценариев. Каждый сценарий имеет функцию.

Одна из моих функций должна быть остановлена ​​в соответствии с оператором 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 $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 выходит за рамки пышных скобок, с ним не следует обращаться Таким образом, все мои другие функции используют один и тот же файл. (изменение пароля пользователя и отключение пользователя - это две разные функции / скрипты из источника)

Как вы видите, возврат не выполняет свою работу, возможно, мне не хватает одного пункта в использовании возврата, но я не получаю его прямо сейчас.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Мне нужно было быстрое решение, поэтому я изменил свои функции, теперь нет возврата / продолжения / ..., но значение, которое становится истинным. Инициализируется как false, и действие для каждой строки yaml выполняется, когда значение равно false.


Edit: Итак, наконец, проблема была в том, что я неправильно использовал функцию. Возврат работает только если вы вернетесь в другую функцию. Поэтому я поместил почти весь sctipt в функцию, которая вызывает функцию AutoIndus-DeployUser. Теперь работает отлично!

0 голосов
/ 31 октября 2018

Для преждевременного выхода из функции, прежде чем вы достигнете конца, используйте

возвращение

он работает как break в том месте, где он остановит выполнение, но вместо остановки всего потока он вернется обратно к строке ниже, где вы вызвали функцию.

Также имейте в виду, что если ваша функция имеет выходной набор, функция возврата вернет его, например, с помощью функции ниже:

функция Get-ReturnValue () {

$ returnValue = "это мой вывод"

return $ returnValue

}

если вы назвали это так:

$ receiveReturnValue = Get-ReturnValue

тогда переменная полученныйReturnValue будет загружена с выводом функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...