CMD/BAT - [решено] IF. пустой вывод опрашиваемой команды

Ответить
Аватара пользователя
Elven

CMD/BAT - [решено] IF. пустой вывод опрашиваемой команды

Сообщение Elven »

Тему назвал коряво, если господа модераторы придумают как ее лучше назвать прошу переименовать.



Решил проверить нету ли каких не отключенных пользователей в домене и естественно не хочу перекапывать их всех руками. Короче, ситуация такая: нужно писать в файл логин в том случае если вывод команды является пустым.

в моем представлении это выглядит приблизительно так:



@echo off

for /F %%a in ('dsquery user -inactive 150 -limit 0 -o samid') do (

dsquery user -samid %%~a -disabled

[условие проверяющие является ли вывод предыдущей команды пустым]

echo %%~a is zombie!!! >> d:\zombie.log

)



Если кто предложит вариант кошернее - буду рад, может я тут изобретательством виласапеда занимаюсь Изображение.

c errorlevel экспериментировал как только не. в эту сторону походу копать бесполезно.
Аватара пользователя
Elven

Re: CMD/BAT - [решено] IF. пустой вывод опрашиваемой команды

Сообщение Elven »

Решил сам, правда с костылем.



Код:

Код: Выделить всё

@echo off
for /F %%a in ('dsquery user -inactive 12 -limit 0 -o samid') do (
dsquery user -samid %%~a -disabled | find "CN"
if errorlevel 1 (
echo %%~a >> d:\zombie.log
)
)

после вывода который должен быть пустым добавляем "FIND" и тут уже используем ERRORLEVEL (сразу после dsquery он в любом случае возвращал "0")
Аватара пользователя
Iska

Re: CMD/BAT - [решено] IF. пустой вывод опрашиваемой команды

Сообщение Iska »

Ищете «мёртвые души»?


Цитата Elven:



Решил проверить нету ли каких не отключенных пользователей в домене и естественно не хочу перекапывать их всех руками.
CMD/BAT - [решено] IF. пустой вывод опрашиваемой команды




Оснастка «ADUC», \Действие\Найти…; Найти: Особый поиск, Вкладка «Дополнительно», поле «Введите запрос LDAP:»:

Код: Выделить всё

(&(samAccountType=805306368)(lastLogon<=129355919658983718)(!userAccountControl:1.2.840.113556.1.4.803:=2))


На PowerShell:


читать дальше »

Код: Выделить всё

$iInactiveDateFrom = ((Get-Date).AddDays(-150 * 7)).ToFileTimeUtc()
$oConnection = New-Object -ComObject "ADODB.Connection"
$oConnection.Provider = "ADSDSOObject"
$oConnection.Open("ADSearch")
$sDefaultNamingContext = ([System.DirectoryServices.DirectoryEntry]"LDAP://rootDSE").defaultNamingContext
$oRecordset = $oConnection.Execute( `
    "<LDAP://$sDefaultNamingContext>;" + `
    "(&(samAccountType=805306368)(lastLogon<=$iInactiveDateFrom)(!userAccountControl:1.2.840.113556.1.4.803:=2));" + `
    "samAccountName;subtree" `
)
while(-not $oRecordset.EOF) {
    Write-Host $oRecordset.Fields.Item("samAccountName").Value
    $oRecordset.MoveNext()
}
$oRecordset.Close()
$oConnection.Close()
Ответить

Вернуться в «Скриптовые языки администрирования Windows»