none
Powershel. Функции и циклы. RRS feed

  • Вопрос

  • Коллеги приветсвую. В Powershell я пока не АС. 
    Есть задача добавить к группам безопасности Windows возможнгость получать почту. С использованием командлета Enable-DistributionGroup.
    Пытаюсь написать скрипт для ввода имени группы и e-mal через передачу параметров PARAM. Написал такой скрипт и обернул его в функцию:

      Function Groups_mail ()
      {
        [CmdletBinding()]
        Param 
        (

        [Parameter (Mandatory=$true)]
       [string]$NameGroup,
       [Parameter (Mandatory=$true)]
       [string]$SMTPAddress
       )
       Get-ADGroup -id $NameGroup | Set-ADGroup -GroupScope Universal

      Enable-DistributionGroup -Identity $NameGroup -PrimarySmtpAddress $SMTPAddress 

     }

    Groups_mail 

    Все работает, но один раз.!!! 

    как заставить функцию вызываться много раз? пробовал вставлять ее в циклы for все равно отрабатывает 1 раз. Или внутри функции может какой цикл сделать? 

    Как лучше реализовать данную задачу что бы после ввода параметров выполнялись действия и потом опять вводлить паракметры. 
    Групп около 50 штук.
    • Перемещено Vector BCOModerator 12 августа 2019 г. 17:26 перенесено из ветки разное
    12 августа 2019 г. 17:06

Ответы

  • Коллеги приветсвую. В Powershell я пока не АС. 
    Есть задача добавить к группам безопасности Windows возможнгость получать почту. С использованием командлета Enable-DistributionGroup.
    Пытаюсь написать скрипт для ввода имени группы и e-mal через передачу параметров PARAM. Написал такой скрипт и обернул его в функцию:

      Function Groups_mail ()
      {
        [CmdletBinding()]
        Param 
        (

        [Parameter (Mandatory=$true)]
       [string]$NameGroup,
       [Parameter (Mandatory=$true)]
       [string]$SMTPAddress
       )
       Get-ADGroup -id $NameGroup | Set-ADGroup -GroupScope Universal

      Enable-DistributionGroup -Identity $NameGroup -PrimarySmtpAddress $SMTPAddress 

     }

    Groups_mail 

    Все работает, но один раз.!!! 

    как заставить функцию вызываться много раз? пробовал вставлять ее в циклы for все равно отрабатывает 1 раз. Или внутри функции может какой цикл сделать? 

    Как лучше реализовать данную задачу что бы после ввода параметров выполнялись действия и потом опять вводлить паракметры. 
    Групп около 50 штук.

    Не понятно что вы подавали как инпут в цикл

    Function Groups_mail {
        [CmdletBinding()]
        Param 
        (
    
       [Parameter (Mandatory=$true)]
       [string]$NameGroup,
       [Parameter (Mandatory=$true)]
       [string]$SMTPAddress
       )
       Get-ADGroup -id $NameGroup | Set-ADGroup -GroupScope Universal
    
      Enable-DistributionGroup -Identity $NameGroup -PrimarySmtpAddress $SMTPAddress 
    
     }
    
    Import-CSV C:\temp\groups.csv | foreach {
       Group_main -NameGroup $_.NameGroup -SMTPAddress $_.SmtpAddress
    }


    The opinion expressed by me is not an official position of Microsoft

    • Предложено в качестве ответа Vector BCOModerator 14 августа 2019 г. 7:00
    • Помечено в качестве ответа Vector BCOModerator 4 ч. 34 мин. назад
    12 августа 2019 г. 17:25
    Модератор
  • директива cmdlet bindings

    $Namegroup - ввожу с клавиатуры имя группы

    $SmtpAdress - e-mail который присваивается группе безопасности.

    Все это находится в блоке Param

    Скрипт работает, но отрабатывает один раз и все. Как сделать что бы он обрабатывался такое количество раз сколько нужно, к примеру 50 или больше.

    можно его обернуть как функцию, как я написал выше, но вызывается такая функция 1 раз, как вызвать постоянно??

    Или как то может в целом скрипт переделать? 

    вы хотите 50 раз руками вводить параметры? если нет то пример с csv выше, если да (что странно для автоматизации) то любой цикл вам подойдет :

    1

    $iteration = 1
    do {
        Write-Host "Configuring group #$iteration"
        Groups_Mail
        $Continue = Read-Host "Do you want continue [{Yes}\No]"
        $Iteration++
    } Until ($continue -match "^No?$")

    2

    Foreach ($i in @(1..50)){
        Write-Host "Configuring group #$i"
        Group_mail
    }

    3

    For ($i =1; $i -le 50; $i++){
        Write-Host "Configuring group #$i"
        Group_mail
    }

    ...

    P.S. проверяйте не в ise, так как он может вносить сумятицу в некоторых ситуациях


    The opinion expressed by me is not an official position of Microsoft

    12 августа 2019 г. 21:03
    Модератор

Все ответы

  • Коллеги приветсвую. В Powershell я пока не АС. 
    Есть задача добавить к группам безопасности Windows возможнгость получать почту. С использованием командлета Enable-DistributionGroup.
    Пытаюсь написать скрипт для ввода имени группы и e-mal через передачу параметров PARAM. Написал такой скрипт и обернул его в функцию:

      Function Groups_mail ()
      {
        [CmdletBinding()]
        Param 
        (

        [Parameter (Mandatory=$true)]
       [string]$NameGroup,
       [Parameter (Mandatory=$true)]
       [string]$SMTPAddress
       )
       Get-ADGroup -id $NameGroup | Set-ADGroup -GroupScope Universal

      Enable-DistributionGroup -Identity $NameGroup -PrimarySmtpAddress $SMTPAddress 

     }

    Groups_mail 

    Все работает, но один раз.!!! 

    как заставить функцию вызываться много раз? пробовал вставлять ее в циклы for все равно отрабатывает 1 раз. Или внутри функции может какой цикл сделать? 

    Как лучше реализовать данную задачу что бы после ввода параметров выполнялись действия и потом опять вводлить паракметры. 
    Групп около 50 штук.

    Не понятно что вы подавали как инпут в цикл

    Function Groups_mail {
        [CmdletBinding()]
        Param 
        (
    
       [Parameter (Mandatory=$true)]
       [string]$NameGroup,
       [Parameter (Mandatory=$true)]
       [string]$SMTPAddress
       )
       Get-ADGroup -id $NameGroup | Set-ADGroup -GroupScope Universal
    
      Enable-DistributionGroup -Identity $NameGroup -PrimarySmtpAddress $SMTPAddress 
    
     }
    
    Import-CSV C:\temp\groups.csv | foreach {
       Group_main -NameGroup $_.NameGroup -SMTPAddress $_.SmtpAddress
    }


    The opinion expressed by me is not an official position of Microsoft

    • Предложено в качестве ответа Vector BCOModerator 14 августа 2019 г. 7:00
    • Помечено в качестве ответа Vector BCOModerator 4 ч. 34 мин. назад
    12 августа 2019 г. 17:25
    Модератор
  • директива cmdlet bindings

    $Namegroup - ввожу с клавиатуры имя группы

    $SmtpAdress - e-mail который присваивается группе безопасности.

    Все это находится в блоке Param

    Скрипт работает, но отрабатывает один раз и все. Как сделать что бы он обрабатывался такое количество раз сколько нужно, к примеру 50 или больше.

    можно его обернуть как функцию, как я написал выше, но вызывается такая функция 1 раз, как вызвать постоянно??

    Или как то может в целом скрипт переделать? 

    12 августа 2019 г. 20:27
  • директива cmdlet bindings

    $Namegroup - ввожу с клавиатуры имя группы

    $SmtpAdress - e-mail который присваивается группе безопасности.

    Все это находится в блоке Param

    Скрипт работает, но отрабатывает один раз и все. Как сделать что бы он обрабатывался такое количество раз сколько нужно, к примеру 50 или больше.

    можно его обернуть как функцию, как я написал выше, но вызывается такая функция 1 раз, как вызвать постоянно??

    Или как то может в целом скрипт переделать? 

    вы хотите 50 раз руками вводить параметры? если нет то пример с csv выше, если да (что странно для автоматизации) то любой цикл вам подойдет :

    1

    $iteration = 1
    do {
        Write-Host "Configuring group #$iteration"
        Groups_Mail
        $Continue = Read-Host "Do you want continue [{Yes}\No]"
        $Iteration++
    } Until ($continue -match "^No?$")

    2

    Foreach ($i in @(1..50)){
        Write-Host "Configuring group #$i"
        Group_mail
    }

    3

    For ($i =1; $i -le 50; $i++){
        Write-Host "Configuring group #$i"
        Group_mail
    }

    ...

    P.S. проверяйте не в ise, так как он может вносить сумятицу в некоторых ситуациях


    The opinion expressed by me is not an official position of Microsoft

    12 августа 2019 г. 21:03
    Модератор
  • если что-то не работает, то приведите дословно что вы делаете и какой вывод получаете

    The opinion expressed by me is not an official position of Microsoft

    13 августа 2019 г. 13:56
    Модератор
  • Спасибо огромное! Получилось ))))))
    16 августа 2019 г. 13:29