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



我目前在一个组织中工作,该组织已经迁移了他们的OU组,因此所有内容都属于一个名为"用户和工作站"的父文件夹。

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

例如,我用来禁用一批机器的当前代码低于

@echo off 
CLS
ECHO Now Disabling Machines...
TIMEOUT 2 > nul
Pause
FOR /f %%i in (%~dp0computernames.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文件夹结构中的空格造成的,但我不知道该怎么做才能更改脚本以继续工作。

有办法改变它吗?我应该试试别的吗?我想弄清楚这件事快疯了!!!

提前感谢

Ben

附言:我想出了一个似乎有效的解决方案-我会保持开放,以防有人能提出更好的方法来做我需要做的事情。请参阅下面的代码。看起来我需要添加正确的delims和两组双引号才能正确退出。。。。这对我来说没有太大意义…但它有效。。。

@echo off
setlocal disabledelayedexpansion

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

试着像一样在%%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
)

请参阅原始帖子了解解决方案。

禁用延迟扩展并指定delims,再加上对变量进行双引号引用,似乎已经解决了这个问题!

最新更新