Мы хотим заменить наши текущие сценарии Kix сценариями Powershell, и мне было любопытно, как проверить членство в группе для сопоставления сетевых дисков. Наш текущий сценарий kix в основном просто выполняет оператор if для каждой группы пользователей и проверяет, является ли пользователь частью этой группы, если они есть, он отображает сетевой диск. Вот пример:
If InGroup("ADGROUP")
Use m: "\\server\share"
EndIf
Я сомневаюсь, что это наиболее эффективный способ сделать это, но я хотел спросить, как я могу сделать то же самое в PowerShell и что люди рекомендуют для правильного сопоставления дисков и принтеров для пользователей в Active Directory.
Если эта информация необходима, все наши клиенты используют Windows Vista / 7, и мы только сейчас переходим на AD 2008.
Я бы использовал настройки групповой политики для сопоставления дисков в AD. См. Раздел Использование предпочтений групповой политики для сопоставления дисков на основе членства в группах. для подробностей. Я также поощряю обучение пользователей тому, как показывать им, как добавлять сетевые расположения в их библиотеки.
Я провел ТРИ дня, пытаясь преобразовать наш существующий файл Kix (который я создал) в Powershell.
Я обнаружил, что Powershell все еще не полностью готов для использования в качестве сценария входа в систему. Возможно, в последней версии, но с Powershell 2.0 прямо сейчас я обнаружил, что используемые команды в основном перенесены из VBS.
Команда «Если» в Kixtart я считаю очень эффективной, потому что я использовал ее на многих клиентских сайтах, и она РАБОТАЕТ. Простая и понятная, она быстрая, команда легко читается системным администратором, который никогда раньше не использовал Kix. Я имею в виду, что если вы сравните ту же команду сопоставления дисков в Kixtart с тем, что вам нужно написать, чтобы сделать то же самое в Powershell, это покажется слишком сложным.
Я написал об этом в своем блоге: http://thisishelpful.com/kix-login-script-remote-desktop-services-server-terminal-server.html. Я собираюсь обновить его, сравнив мой скрипт kix с моим модифицированным скриптом Powershell, и вы поймете, что я имею в виду.
Надеюсь, это поможет.
Что касается AD, вам могут потребоваться командлеты Quest AD.
# ************ script de connexion aux lecteurs réseau ***************
$filter = "(&(objectcategory=user)(Name=$env:username))"
$ds = New-object System.DirectoryServices.DirectorySearcher([ADSI]"",$filter)
$user = ($ds.Findone()).properties.memberof
#********************** Mappage du drive commun aux Directions S
foreach ($grouppath in $user)
{
$group = ([adsi]"LDAP://$($grouppath.tostring())").sAMAccountname
switch ($group)
{
"group1" {net use S: \\fileserver\share1 }
"group2" {net use S: \\fileserver\share2 }
"group3" {net use S: \\fileserver\share3 }
"group4" {net use S: \\fileserver\share4 }
}
}
Чтобы проверить членство в группе в PowerShell:
$wid=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$prp=new-object System.Security.Principal.WindowsPrincipal($wid)
$adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator
$IsAdmin=$prp.IsInRole($adm)
Последние две строки представляют собой образец, которому следует следовать для встроенной группы (есть количество этих). Также есть перегрузка IsInRole
который принимает строку, например. "домен \ группа".
Чтобы сопоставить диск, выполняющий net use ...
вероятно, самый простой (PowerShell может легко вызывать исполняемые файлы консоли).