2012-06-06 23 views
0

我正在嘗試創建一個批處理文件,要求輸入源samid和目標samid。然後,使用dsquery和dsget查找分配給samid的安全組,並使用dsmod將目標samid分配給這些安全組。試圖將安全組複製到AD中使用dsmod組實用程序的用戶

除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

亞歷克斯 - 我不太明白你的迴應。如上所述,我將dusercn設置爲null,然後將其分配給來自目標用戶的cn路徑的dsquery的輸出。因此,當我使用該命令進行命令時,應該爲這個值賦予這個值嗎? – newbie

+0

不,它不會將命令的輸出分配給一個變量,您不能像在其他shell腳本語言中那樣設置它;在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 
相關問題