Войти

Показать полную графическую версию : [решено] IF. пустой вывод опрашиваемой команды


Elven
08-10-2013, 19:12
Тему назвал коряво, если господа модераторы придумают как ее лучше назвать прошу переименовать.

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

@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
15-10-2013, 11:53
Решил сам, правда с костылем.

@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
15-10-2013, 16:02
Ищете «мёртвые души»?
Решил проверить нету ли каких не отключенных пользователей в домене и естественно не хочу перекапывать их всех руками. »
Оснастка «ADUC», \Действие\Найти…; Найти: Особый поиск, Вкладка «Дополнительно», поле «Введите запрос LDAP:»:
(&(samAccountType=805306368)(lastLogon<=129355919658983718)(!userAccountControl:1.2.840.113556.1.4.803:=2))
http://img837.imageshack.us/img837/9043/9cal.png

На 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()




© OSzone.net 2001-2012