Автор: rmvl
Дата сообщения: 27.10.2008 21:20
Господа, просвятите, плз.
Задача - получение информации о членстве текущего пользователя в группах, и выполнение скриптов, расположенных в каталогах с именами, совпадающими с именами групп.
Написал такой скрипт
--------------------------
@echo off
setlocal enabledelayedexpansion
set user=%username%
set scripts=.
for /F "usebackq tokens=2 delims=*" %%i IN (`net user %user% /domain`) do (
echo "%%i"
IF EXIST "%scripts%\%%i" (
for %%f in ("%scripts%\%%i\*.bat" "%scripts%\%%i\*.cmd") do (
call "%%f"
)
)
)
--------------------------
Но есть одно но: долбаная net user использует форматированный вывод, и имена групп либо обрезаются, либо дополняются пробелами до фиксированной длины. Т.е. получаем результат:
--------------------------
D:\bin\logon>init.bat
"Administrators "
"AdmExtAccess "
"Администраторы предпр"
"Пользователи домена "
"Администраторы домена"
"Adm "
"Администраторы схемы "
--------------------------
Не так страшно (в моем случае), что обрезаются длинные имена, как наличие пробелов в конце коротких.
Смотрел set /?, нашел т.н. строки расширения. Например
echo "%var:~0,-1%"
печатает переменную var без последнего символа. Но, понятно - это не совсем то.
А есть ли возможность тупо отрезать все пробелы в конце переменной? Или, как вариант, получить неформатированную информацию, без пробелов изначально?
Заранее спасибо.
Добавлено:
Извиняюсь, плохо искал. А может, просто не то. Одним словом этот скрипт делает то, что мне надо.
@echo off
setlocal enabledelayedexpansion
set domain1=domain
set domain2=local
set user=%username%
set scripts=\\server\netlogon
for /F "usebackq tokens=2 delims==," %%i IN (`dsget user "cn=%user%,CN=Users,DC=%domain1%,dc=%domain2%" -memberof`) do (
echo "%%i"
IF EXIST "%scripts%\%%i" (
for %%f in ("%scripts%\%%i\*.bat" "%scripts%\%%i\*.cmd") do (
call "%%f"
)
)
)