2012-06-06 4 views
0

Я пытаюсь создать командный файл, который просит ввести исходный код samid и samim. Затем, используя dsquery и dsget, выясните, к какому классу исходных данных безопасности относятся назначенные и назначают целевую систему для этих групп безопасности, используя dsmod.пытается скопировать группы безопасности пользователю с использованием утилиты группы dsmod в AD

Все работает, кроме команды группы dsmod. Он ничего не делает, и пакетный файл останавливается. Если я буквально положил "CN=marketing,OU=test group,DC=abc,DC=com" вместо %%g и "CN=test1,OU=test group,DC=abc,DC=com" вместо %dusercn%, он отлично работает.

Может ли кто-нибудь помочь в этом? Я наклеил здесь свой скрипт. Эта последняя мелочь убивает меня.

echo off 
echo %date% at %time% 
set /p susername=enter source user name: 
set /P dusername=enter destination user name: 
echo %susername% 
echo %dusername% 
set dusercn= 
%dusercn%=dsquery user -samid %dusername% 
echo %dusercn% 

for /f "tokens=*" %%g in ('dsquery user -samid %susername% ^|dsget user -memberof') do **(dsmod group %%g -addmbr %dusercn%)** 

echo completed 
pause 
+0

Очевидно, причина в том, что %% g и% dusercn% не имеют литералов, которые работают. Я вижу, что 'dusercn' инициализируется пустым. Но вы попытались установить его, вероятно, на вывод команды dsquery. Вам нужно исправить это с помощью команды FOR. –

+0

alex - я не совсем понимаю ваш ответ. как вы сказали выше, я установил dusercn в null, а затем назначен для вывода из dsquery, который является cn-адресом конечного пользователя. поэтому shouldnt dusercn быть назначено с этим значением, когда я использую это для команды? – newbie

+0

Нет, это не так, чтобы назначить вывод команды в переменную, вы не можете просто установить ее так же, как на других языках сценариев на скриптах; в файлах BAT вам необходимо использовать команду FOR. –

ответ

0

благодарит за вашу помощь. Я отправляю ответ, который работал для меня. надеюсь, это поможет другим новичкам, как я.

echo off 

echo %date% at %time% 

set /p susername=enter source user name: 

set /P dusername=enter destination user name: 

rem echo+ is used for new line. 
echo+ 

echo entered source user name: %susername% 

echo entered destination user name: %dusername% 

echo+ 

set dusercn=0 

set lines=0 

for /f "tokens=*" %%g in ('dsquery user -samid %susername% ^|dsget user -memberof') do (

echo %%g 

dsquery user -samid %dusername% | dsmod group %%g -addmbr -c 

set /a lines=lines+1 
) 

echo+ 

echo+ 

echo ************************** 

echo number of lines processed %lines% 

echo script completed 

echo ************************** 

pause 
Смежные вопросы