Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 正在尝试使用AD中的dsmod group实用程序将安全组复制到用户_Batch File_Active Directory_Dsquery - Fatal编程技术网

Batch file 正在尝试使用AD中的dsmod group实用程序将安全组复制到用户

Batch file 正在尝试使用AD中的dsmod group实用程序将安全组复制到用户,batch-file,active-directory,dsquery,Batch File,Active Directory,Dsquery,我试图创建一个批处理文件,要求输入源samid和目标samid。然后使用dsquery和dsget找出源samid分配给哪些安全组,并使用dsmod将目标samid分配给这些安全组 除了dsmod group命令外,其他一切都正常工作。它什么也不做,批处理文件停止。如果我真的把CN=marketing,OU=testgroup,DC=abc,DC=com而不是%%g,把CN=test1,OU=testgroup,DC=abc,DC=com而不是%dusercn%放在一起,效果很好 有人能帮忙吗?

我试图创建一个批处理文件,要求输入源samid和目标samid。然后使用dsquery和dsget找出源samid分配给哪些安全组,并使用dsmod将目标samid分配给这些安全组

除了dsmod group命令外,其他一切都正常工作。它什么也不做,批处理文件停止。如果我真的把CN=marketing,OU=testgroup,DC=abc,DC=com而不是%%g,把CN=test1,OU=testgroup,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

谢谢你的帮助。我张贴的答案,为我工作。希望它能帮助像我这样的新手

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

显然,原因是%%g和%dusercn%没有有效的文本。我可以看到dusercn被初始化为空。但您可能试图将其设置为dsquery命令的输出。你需要用FOR命令来解决这个问题。亚历克斯-我不太明白你的回答。如上所述,我将dusercn设置为null,然后将其分配给来自dsquery的输出,这是目标用户的cn路径。那么,当我在for命令中使用dusercn时,是否应该为dusercn分配该值呢?不,它不会,要将命令的输出分配到变量中,您不能像在其他shell脚本语言中那样设置它;在BAT文件中,您需要使用FOR命令。我将FOR循环更改为您建议的,但它仍然不起作用。以下是我更改为的内容,对于/f tokens=*%%g in'dsquery user-samid%susername%^ | dsget user-memberof'do echo%%g%dusercn%=dsquery user-samid%dusername%dsmod group%%g-addmbr%dusercn%echo%dusercn%谢谢大家,我终于弄明白了……我不知道如何发布适合我的脚本。有人请让我知道,这样我可以张贴它,以便它可以帮助其他新手像我一样-