批处理脚本在AD中禁用/移动/删除多台计算机

时间:2013-09-04 01:26:59

标签: windows batch-file active-directory

我目前正在一个已迁移其OU组的组织中工作,以便所有内容都属于名为“用户和工作站”的父文件夹。

对我来说这是一个小问题,因为我有一些批处理脚本可以从文本文件中删除用户和计算机 - 这是我经常运行的。

我使用的当前代码,例如,禁用一批机器在

下面
@echo off 
CLS
ECHO Now Disabling Machines...
TIMEOUT 2 > nul
Pause
FOR /f %%i in (%~dp0\computernames.txt) do ( 
dsquery computer -name %%i | dsmod computer -disabled Yes
)

如果我在更改后运行此代码,则会出现以下错误

dsmod failed:'Target object for this command' is missing.
type dsmod /? for help.

但是,如果我手动将dsquery / dsmod代码行键入命令提示符并将“%% i”替换为失败的计算机,则会成功。

我几乎可以肯定这是由于OU文件夹结构中的空格,但不知道如何更改我的脚本以继续工作。

有没有办法改变它?我应该尝试别的吗?我疯了,试图解决这个问题!

提前致谢,

P.S。我想出了一个似乎有效的解决方案 - 我会保持这个开放状态,任何人都可以建议一个更好的方法去做我需要做的事情。请参阅下面的代码,对我有用。看起来我需要添加正确的delims和两组双引号才能正确退出....这对我来说没有多大意义......但它有效...

@echo off
setlocal disabledelayedexpansion


CLS
ECHO Now Disabling Machines...
ECHO.
Pause
FOR /f "delims= " %%i in (%~dp0\computernames.txt) do ( 
echo disabling %%i && echo. && dsquery computer -name ""%%i"" | dsmod computer -disabled Yes && echo.
)

2 个答案:

答案 0 :(得分:0)

尝试在此行中使用%% i上的引号

dsquery computer -name "%%i" | dsmod computer -disabled Yes

编辑(在下面添加): 啊......我打赌当前的目录不是你的想法。也许您正在从UNC驱动器执行。试试这个:

pushd %~dp0
FOR /f %%i in (computernames.txt) do ( 
   dsquery computer -name "%%i" | dsmod computer -disabled Yes
)

答案 1 :(得分:0)

请参阅原帖以获得解决方案。

禁用延迟扩展并指定delim,以及双重引用该变量似乎已经修复了问题!