none
Хитрая задача на bat - проверка вхождения слова в текстовом файле RRS feed

  • Вопрос

  •  Добрый день,

    Подскажите, как написать такой bat-файл.
    1. Получаем имя пользователя, под которым он вошел в систему.
    2. Если имя_пользователя содержится в файле1, то выполняем задачу1
    Если имя_пользователя содержится в файле2, то выполняем задачу2
    и т. д.

    Вопроса два.
    1. Как получить имя пользователя?
    2. Как проверить вхождение слова в текстовый файл?
    Файл1, файл2... - это просто файлы, содержащие списки пользователей, например:
    ivanov
    petrov
    sidorov
    ...

    Ну и третий вопрос, факультативный.
    Можно ли проверить, входит ли данный пользователь в определённую группу безопасности домена?

    Спасибо.

    19 февраля 2009 г. 7:55

Ответы

  • 1. %USERNAME%
    2.  find /i %USERNAME% c:\папка_с_файлами\*
    3. Можно
    • Помечено в качестве ответа Dmitriy Kolesnikov 19 февраля 2009 г. 8:53
    19 февраля 2009 г. 8:19
    Отвечающий
  • echo off
    rem получаем текущего пользователя
    set user=%username%


    rem перебираем первый файл
    rem подробнее о команде for /?
    for /f %%i in (user01.txt) do (
      if %%i==%user% "calc.exe"
    )

    rem перебираем второй файл
    for /f  %%i in (user02.txt) do (
      if %%i==%user% "mspaint.exe"
    )

    for /f %%i in ('cmd /c "dsquery user -samid %username% | dsget user -memberof -expand | dsget group -samid"') do (
      if %%i==Users echo %%i
    )

    rem получаем группы пользователя:
    rem dsquery user -samid %username% | dsget user -memberof -expand <- DN
    rem dsquery user -samid %username% | dsget user -memberof -expand | dsget group -samid <- SAM

    19 февраля 2009 г. 8:20
  • Спасибо, по первым двум пунктам задача решается так:

    find "domain\%username%" C:\TEMP\list1.txt && (start /wait batch1.bat & exit)
    Если имя юзера в файле есть, то запускается batch1 и выход из файла.

    По третьему - вариант с dsquery видимо лучший для домена.
    Если группа не доменная, то проверить можно с помощью команды ifmember из ResKit`а, щас пытаюсь соченить запрос.
    • Помечено в качестве ответа Dmitriy Kolesnikov 19 февраля 2009 г. 8:51
    19 февраля 2009 г. 8:50

Все ответы

  • 1. %USERNAME%
    2.  find /i %USERNAME% c:\папка_с_файлами\*
    3. Можно
    • Помечено в качестве ответа Dmitriy Kolesnikov 19 февраля 2009 г. 8:53
    19 февраля 2009 г. 8:19
    Отвечающий
  • echo off
    rem получаем текущего пользователя
    set user=%username%


    rem перебираем первый файл
    rem подробнее о команде for /?
    for /f %%i in (user01.txt) do (
      if %%i==%user% "calc.exe"
    )

    rem перебираем второй файл
    for /f  %%i in (user02.txt) do (
      if %%i==%user% "mspaint.exe"
    )

    for /f %%i in ('cmd /c "dsquery user -samid %username% | dsget user -memberof -expand | dsget group -samid"') do (
      if %%i==Users echo %%i
    )

    rem получаем группы пользователя:
    rem dsquery user -samid %username% | dsget user -memberof -expand <- DN
    rem dsquery user -samid %username% | dsget user -memberof -expand | dsget group -samid <- SAM

    19 февраля 2009 г. 8:20
  • Спасибо, по первым двум пунктам задача решается так:

    find "domain\%username%" C:\TEMP\list1.txt && (start /wait batch1.bat & exit)
    Если имя юзера в файле есть, то запускается batch1 и выход из файла.

    По третьему - вариант с dsquery видимо лучший для домена.
    Если группа не доменная, то проверить можно с помощью команды ifmember из ResKit`а, щас пытаюсь соченить запрос.
    • Помечено в качестве ответа Dmitriy Kolesnikov 19 февраля 2009 г. 8:51
    19 февраля 2009 г. 8:50
  • Вопрос ещё такой. Если я хочу использовать dsquery на недоменном компе, то надо ли мне предварительно авторизовываться на контроллере домена и если да, то как?
    Не хочется, чтобы в процессе выполнения скрипта юзеру вываливалось диалоговое окно с просьбой ввести логин\пароль для подключения к контроллеру домена.

    19 февраля 2009 г. 9:14
  • В параметрах dsquery можно указать и имя и пароль  -u имя юзера  -p - пароль
    19 февраля 2009 г. 9:44
    Отвечающий