none
Скрипт PS изменения разрешений. RRS feed

  • Вопрос

  • Здравствуйте! 

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

    Имеется:

    Windows Server 2012 r2 standart на нем Microsoft Exchange 2013 CU3.  порядка 55 ящиков.

    Это единственный Exchange  в организации. Все роли на нем.

    Нужно менять разрешения на доступ к календарям пользователей и хочется не тыкать по одному. 

    Делаю так:

    $users=Get-Mailbox -OrganizationalUnit almaty |select Alias 

    получаю в переменной  список имен ящиков этой OU.

    теперь нужно "прикрутить" к этим именам строку :\Календарь  чтобы получилось  user:\Календарь. Тут загвоздка. Как?

    Далее нужно создать переменную

    $Pubeditor=user1,user2

    тут тоже загвоздка,  как правильно это создать? Чтобы команда правильно распознала. В мане говорится что нужно использовать массив... 

    В итоге команда должна делать следующее:

    1. брать из переменной $users первое значение столбца Alias, прикручивать к нему :\Календарь

    2.запускать для этого набора команду куда  подставляются переменные:

    set-MailboxFolderPermission $users -user $Pubeditor -accessrights publishingEditor

    3. брать второе значениепеременной $users из столбца Alias, прикручивать к нему :\Календарь

    запускать команду...... 

     и так далее. 

    помогите разобраться и правильно написать скрипт. 

    8 июля 2015 г. 11:00

Ответы

  • $Pubeditor=@("user1","user2")
    $Pubeditor.GetType()

    $id = 0

    Get-Mailbox -OrganizationalUnit almaty | select Alias |foreach { $_.Alias "$($_.Alias):\Календарь"
    $Pubeditor[$id]
    set-MailboxFolderPermission "$($_.alias):\Календарь" -user $Pubeditor[$id] -accessrights publishingEditor
    $id++ }








    • Изменено Vector BCO 16 июля 2015 г. 10:20
    • Предложено в качестве ответа Vector BCO 16 июля 2015 г. 10:21
    • Помечено в качестве ответа Alexander RusinovModerator 17 июля 2015 г. 5:02
    8 июля 2015 г. 11:13
  • В скрипте небольшая опечатка. Надо $Pubeditor[id] заменить:

    $Pubeditor[$id]

    $Pubeditor.GetType() - строка для отладки. Если удалить, ничего не поменяется.

    $id = 0 - счетчик. Почитайте про цикл. $id++ прибавляет 1 к счетчику.

    http://www.osp.ru/win2000/2009/06/9842551/

    $Pubeditor[$id] - отображает значение элемента $id массива $Pubeditor.

    http://www.sysadmins.lv/PermaLink,guid,f388c990-e016-4585-8926-dbf2b70ac187.aspx


    15 июля 2015 г. 6:00

Все ответы

  • $Pubeditor=@("user1","user2")
    $Pubeditor.GetType()

    $id = 0

    Get-Mailbox -OrganizationalUnit almaty | select Alias |foreach { $_.Alias "$($_.Alias):\Календарь"
    $Pubeditor[$id]
    set-MailboxFolderPermission "$($_.alias):\Календарь" -user $Pubeditor[$id] -accessrights publishingEditor
    $id++ }








    • Изменено Vector BCO 16 июля 2015 г. 10:20
    • Предложено в качестве ответа Vector BCO 16 июля 2015 г. 10:21
    • Помечено в качестве ответа Alexander RusinovModerator 17 июля 2015 г. 5:02
    8 июля 2015 г. 11:13
  • Вывалил вот что:

    строка:8 знак:15

    +    $Pubeditor[id]
    +               ~
    Выражение индекса массива отсутствует или недопустимо.
    строка:8 знак:15
    +    $Pubeditor[id]
    +               ~~~
    Непредвиденная лексема "id]" в выражении или операторе.
    строка:9 знак:74
    +    set-MailboxFolderPermission "$($_.alias):\Календарь" -user $Pubeditor[id] -ac ...
    +                                                                          ~
    Выражение индекса массива отсутствует или недопустимо.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : MissingArrayIndexExpression

    И если можно, поясните куски кода:

    $Pubeditor.GetType()

    $id = 0

    $Pubeditor[id]$id++

    Спасибо

    • Изменено vussoltsev 15 июля 2015 г. 5:26
    15 июля 2015 г. 5:24
  • В скрипте небольшая опечатка. Надо $Pubeditor[id] заменить:

    $Pubeditor[$id]

    $Pubeditor.GetType() - строка для отладки. Если удалить, ничего не поменяется.

    $id = 0 - счетчик. Почитайте про цикл. $id++ прибавляет 1 к счетчику.

    http://www.osp.ru/win2000/2009/06/9842551/

    $Pubeditor[$id] - отображает значение элемента $id массива $Pubeditor.

    http://www.sysadmins.lv/PermaLink,guid,f388c990-e016-4585-8926-dbf2b70ac187.aspx


    15 июля 2015 г. 6:00
  • $Pubeditor[$id]  мой косяк, уже поправил...
    15 июля 2015 г. 7:06
  • Там есть еще одно вхождение этой переменной, там тоже надо бы исправить))

    я чуть чуть шарю! 

    Спасибо!

    16 июля 2015 г. 9:16
  • Тут  господа какаято непонятность образовалась. 

    Если я правильно понял - то ... я ничо не понял. 

    Первые 2  - все нормально. Такое из за того, что записи уже есть. 

    Но вот дальше... 

    Хотя я наверное понял. 

    скрипт берет первого юзера из Pubeditor, подставляет его в команду для первого мейлбокса.

    Потом берет второго юзера из Pubeditor  и  подставляет в  команду для второго мейлбокса.

    А должно быть так.

    первый юзер из Pubeditor  должен отрабоаться по всем  мейлбоксам из Алиас

    потом второй юзер из Pubeditor  должен отработаться по всем мейлбоксам из Алиса.


    $Pubeditor=@("vussoltsev","akalashnikova")
    $Pubeditor.GetType()
    $id = 0
    Get-Mailbox -OrganizationalUnit almaty | select Alias |foreach {
       $_.Alias
       "$($_.Alias):\Календарь"
       $Pubeditor[$id]
       Add-MailboxFolderPermission "$($_.alias):\Календарь" -user $Pubeditor[$id] -accessrights publishingEditor
       $id++
    }


    IsPublic IsSerial Name                                     BaseType                                                                  
    -------- -------- ----                                     --------                                                                  
    True     True     Object[]                                 System.Array                                                              
    itolokonnikov
    itolokonnikov:\Календарь
    vussoltsev
    True     True     Int32                                    System.ValueType                                                          
    True     True     Object[]                                 System.Array                                                              
    Add-MailboxFolderPermission : Обнаружена существующая запись разрешения для пользователя: Усольцев Владимир.
    C:\Users\eadmin\Desktop\PShell_Exch\Akalashnikova.ps1:10 знак:4
    +    Add-MailboxFolderPermission "$($_.alias):\Календарь" -user $Pubeditor[$id] -a ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Add-MailboxFolderPermission], UserAlreadyExistsInPermissionEntryException
        + FullyQualifiedErrorId : [Server=IO-EXCH,RequestId=1c8a82e6-f108-4367-aea9-1d70536ef49b,TimeStamp=16.07.2015 10:25:12] 80984084 
       ,Microsoft.Exchange.Management.StoreTasks.AddMailboxFolderPermission
     
    akalashnikova
    akalashnikova:\Календарь
    akalashnikova
    True     True     Int32                                    System.ValueType                                                          
    True     True     Object[]                                 System.Array                                                              
    Add-MailboxFolderPermission : Обнаружена существующая запись разрешения для пользователя: Калашникова Алена.
    C:\Users\eadmin\Desktop\PShell_Exch\Akalashnikova.ps1:10 знак:4
    +    Add-MailboxFolderPermission "$($_.alias):\Календарь" -user $Pubeditor[$id] -a ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Add-MailboxFolderPermission], UserAlreadyExistsInPermissionEntryException
        + FullyQualifiedErrorId : [Server=IO-EXCH,RequestId=1c8a82e6-f108-4367-aea9-1d70536ef49b,TimeStamp=16.07.2015 10:25:12] 25E46146 
       ,Microsoft.Exchange.Management.StoreTasks.AddMailboxFolderPermission
     
    ysapogov
    ysapogov:\Календарь
    True     True     Int32                                    System.ValueType                                                          
    True     True     Object[]                                 System.Array                                                              
    Add-MailboxFolderPermission : Не удается привязать аргумент к параметру "User", так как он имеет значение NULL.
    C:\Users\eadmin\Desktop\PShell_Exch\Akalashnikova.ps1:10 знак:63
    +    Add-MailboxFolderPermission "$($_.alias):\Календарь" -user $Pubeditor[$id] -a ...
    +                                                               ~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidData: (:) [Add-MailboxFolderPermission], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.Exchange.Management.StoreTasks.AddMailboxFold 
       erPermission
     

    16 июля 2015 г. 10:34
  • $Pubeditors=@("vussoltsev","akalashnikova")
    
    Get-Mailbox -OrganizationalUnit almaty | select Alias | foreach {
        $_.Alias
        $AliasWithCalendar = "$($_.Alias):\Календарь"
        foreach ($Pubeditor in $Pubeditors) {
            Add-MailboxFolderPermission $AliasWithCalendar -user $Pubeditor -accessrights publishingEditor
        }
    }

    Получится 2 вложенных цикла

    У меня екченджа нет, проверить к сожалению не могу


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


    16 июля 2015 г. 12:00