none
Проверка строки в файле RRS feed

  • Вопрос

  • Есть у меня такой скриптик.

    Add-PSSnapin Quest.ActiveRoles.ADManagement

    #на вход приходит файл с БД формата:
    net1111

    net2222

    net3333

    после выбираются записи которые не заблокированы в домене и сохраняются в файл
    Get-content C:\oracle\script\Disable_user\export.lst|get-qaduser -enabled|%{$_.name}>"C:\oracle\script\Disable_user\enabled.lst"
    $date=Get-Date -format "dd-MMM-yyyy HH:mm"

    #здесь происходит блокировка записей из файла.
    Get-content C:\oracle\script\Disable_user\enabled.lst|where {$_.name -match "net"}|disable-qaduser |%{"$_ $date"}|Out-File "C:\oracle\script\Disable_user\disabled.log" -append

    Но в один прекрасный день в БД были инвалидные обьекты и на вход PS поступил файл в котором была ошибка выполнения селекта...и в одной строке там была "*")))..на утро все учетки в домене были заблокированы(я каюсь, меры уже принял)))

    как мне вставить проверку в строке:

    Get-content C:\oracle\script\Disable_user\export.lst|get-qaduser -enabled|%{$_.name}>"C:\oracle\script\Disable_user\enabled.lst"

    Как мне реализовать механиз проверки входной строки?

    Если строка не похожа на "net????" тогда перейти к следуещей, без занесения записи в файл.

    Или подскажите свои идеи)

    Спасибо.

    18 августа 2010 г. 6:26

Ответы

  • >Если строка не похожа на "net????" тогда перейти к следуещей

    Заменить

    ...|where {$_.name -match "net"}|...

    на

    ...|where {$_ -match "^net[^*]{4}$"}|...

     Upd. Извиняюсь, невнимательно прочитал. Надо отвильтровать записи, сожержащие "*", тогда надо так:

    ...|where {$_ -match "^net[^*]{4}$"}|...

    Upd.2 еще раз подправил, чтоб правильный ответ был правильным ;)


    blog: http://shss.wordpress.com/
    • Помечено в качестве ответа Andrii Dovbnia 18 августа 2010 г. 11:58
    • Изменено s.h.s. _ 18 августа 2010 г. 12:01
    18 августа 2010 г. 10:15
  • да не, причина не в кодировке, просто результатом get-content бкдет простая строка, а не объект с полями

    поэтому $_.name лишено смысла и всегда пусто


    blog: http://shss.wordpress.com/
    • Помечено в качестве ответа Andrii Dovbnia 18 августа 2010 г. 11:58
    18 августа 2010 г. 11:52

Все ответы

  • >Если строка не похожа на "net????" тогда перейти к следуещей

    Заменить

    ...|where {$_.name -match "net"}|...

    на

    ...|where {$_ -match "^net[^*]{4}$"}|...

     Upd. Извиняюсь, невнимательно прочитал. Надо отвильтровать записи, сожержащие "*", тогда надо так:

    ...|where {$_ -match "^net[^*]{4}$"}|...

    Upd.2 еще раз подправил, чтоб правильный ответ был правильным ;)


    blog: http://shss.wordpress.com/
    • Помечено в качестве ответа Andrii Dovbnia 18 августа 2010 г. 11:58
    • Изменено s.h.s. _ 18 августа 2010 г. 12:01
    18 августа 2010 г. 10:15
  • Спасибо.

    но почему-то в даной конструкции:

    Add-PSSnapin Quest.ActiveRoles.ADManagement
    Get-content C:\oracle\script\Disable_user\export.lst|get-qaduser -enabled|%{$_.name}>"C:\oracle\script\Disable_user\enabled.lst"
    $date=Get-Date -format "dd-MMM-yyyy HH:mm"
    Get-content C:\oracle\script\Disable_user\enabled.lst|where {$_.name -match "^net[^*]{4}$"}|echo

    #disable-qaduser |%{"$_ $date"}|Out-File "C:\oracle\script\Disable_user\disabled.log" -append

    на екран у меня ничего не выводится. Как только забираю where... тогда на екран получаю записи из файла enabled.lst:

    net8888

    net0000

    online

    фактически получается, что некоректно работает where

    18 августа 2010 г. 11:17
  • возможно, что файл enabled.lst содержит какие-либо лишние символы (пробелы, табуляторы и тп)?

    Покажите результат выполнения команды Get-content C:\oracle\script\Disable_user\enabled.lst| %{"=$($_.name)="}

     


    blog: http://shss.wordpress.com/
    18 августа 2010 г. 11:31
  • возможно, что файл enabled.lst содержит какие-либо лишние символы (пробелы, табуляторы и тп)?

    Покажите результат выполнения команды Get-content C:\oracle\script\Disable_user\enabled.lst| %{"=$($_.name)="}

     


    blog: http://shss.wordpress.com/


    PS C:\oracle\script\Disable_user> Get-content C:\oracle\script\Disable_user\enabled.lst| %{"=$($_.name)="}
    ==
    ==
    ==

     

    18 августа 2010 г. 11:34
  • да, но это означает, что $_.name есть "" или $null

    покажите для примера содержимое файла enabled.lst


    blog: http://shss.wordpress.com/
    18 августа 2010 г. 11:45
  • может причина в кодировке?

    файл enabled.lst:

    net8888
    net0000
    Onlinekurs

    в файле нет пустых строк, нет пробелов/табуляций после имени пользователя.

    18 августа 2010 г. 11:50
  • да не, причина не в кодировке, просто результатом get-content бкдет простая строка, а не объект с полями

    поэтому $_.name лишено смысла и всегда пусто


    blog: http://shss.wordpress.com/
    • Помечено в качестве ответа Andrii Dovbnia 18 августа 2010 г. 11:58
    18 августа 2010 г. 11:52
  • s.h.s

    Спасибо!

    теперь все виглядит так:

    Add-PSSnapin Quest.ActiveRoles.ADManagement
    Get-content C:\oracle\script\Disable_user\export.lst|get-qaduser -enabled|%{$_.name}>"C:\oracle\script\Disable_user\enabled.lst"
    $date=Get-Date -format "dd-MMM-yyyy HH:mm"
    Get-content C:\oracle\script\Disable_user\enabled.lst|where {$_ -match "^net[^*]{4}$"}|disable-qaduser |%{"$_ $date"}|Out-File "C:\oracle\script\Disable_user\disabled.log" -append
    

     

    18 августа 2010 г. 11:58