2014-03-04 29 views
1

我试图制作一个批处理脚本来列出我的域中没有计算机说明的所有笔记本电脑。没有说明的dsquery计算机

我似乎无法让DSQUERY发现电脑没有说明 例子:

DSQUERY Computer -name [COMPUTERNAMES]* -desc "" -limit 0 | dsget computer -dn -desc 
dsquery failed:The search filter cannot be recognized. 
type dsquery /? for help. 
dsget failed:'Target object for this command' is missing. 
type dsget /? for help. 

在上面的例子中我试图寻找-desc“”,这是行不通的。你们中的任何一个人都有一些技巧来列出没有说明的电脑吗 感谢您的回复!

我已经修改了我的脚本有点实际掰开 'DSGET计算机-dn -desc' 是这样的:

DSQUERY Computer -name LAPTOP* -limit 0 | dsget computer -dn -desc>computers_unformatted.txt 
FOR /F "tokens=2,15,16,17,18,19,20 delims=,= " %%a IN (computers_unformatted.txt) DO (
    ECHO.%%a^|%%b^|%%c^|%%d^|%%e^|%%f^|%%g>>computers_unformatted2.txt 
) 

输出看起来是这样的:

LAPTOP039|John|Doe|T430|Windows7|| 
LAPTOP040|||||| 

我到这里有一些很好的东西,但我似乎无法写出任何能让输出变得正常的东西(在上面的例子中输出)'LAPTOP040'

+0

解析输出,证明说明** **是目前还会告诉你相反。如果您可以提供示例查询输出**,在您的问题中有和没有**描述,那么您可能会有一些想法。 – foxidrive

+0

我已经想到了。输出文件的操作,但它有一个奇怪的格式,如下所示:CN = LAPTOP011,OU =笔记本电脑,OU =计算机,OU = ACME,OU = ONE,DC = TWO,DC =三个johndoe,T430,Windows 7 CN = LAPTOP_012,OU =笔记本电脑,OU =计算机,OU = ACME,OU = ONE,DC = TWO,DC = TH所有前后空格都存在于我编写DSQUERY的文本文件中。 DSGET - 陈述到我原来的问题(只需添加'> C:\ TEMP \ dsgetOutput.txt')。 – MatthiasPettersson

+0

你可以通过编辑粘贴信息到你的问题吗?布局很重要。 – foxidrive

回答

1

你在这里:

@echo off 
setlocal 

set "dsq=dsquery * dc^=acme^,dc^=one^,dc^=com -limit 0 -filter "^&^(ObjectCategory^=Computer^)^(ObjectClass^=Computer^)" -attr cn description" 
for /f "skip=1 tokens=1,2*" %%a in ('%dsq%') do ( 
    if "%%b" EQU "" echo %%a is missing a description 
) 
exit /b 

而只是为了好玩,我掀起这件事

@echo off 
setlocal enabledelayedexpansion 

set "dsq=dsquery * dc^=acme^,dc^=one^,dc^=com -limit 0 -filter "^&^(ObjectCategory^=Computer^)^(ObjectClass^=Computer^)" -attr cn description" 
for /f "skip=1 tokens=1,2*" %%a in ('%dsq%') do ( 
    if "%%b" EQU "" (
    echo(%%a is missing a description 
    set /p "ans=Would you like to add a description for %%a now? (Y/N) " 
     if /i "!ans!" EQU "Y" ( 
      set /p "desc=Enter a new description for %%a: " 
      dsadd computer "%%a" -desc !desc! 
     ) ELSE (
      Echo Moving on to next computer. 
     ) 
    ) 
) 
exit /b 
+0

非常感谢你@Matt Williamson 你已经度过了我的一天! – MatthiasPettersson