Лучший отвечающий
Скрипт PS изменения разрешений.

Вопрос
-
Здравствуйте!
Я полный нуб в 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
- Помечено в качестве ответа Alexander RusinovModerator 17 июля 2015 г. 5:02
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
- Помечено в качестве ответа Alexander RusinovModerator 17 июля 2015 г. 5:02
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
- Изменено Vector BCO 16 июля 2015 г. 12:01
- Предложено в качестве ответа Alexander RusinovModerator 17 июля 2015 г. 5:02
16 июля 2015 г. 12:00