Компьютер 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 computer -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"
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