Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell

Модерирует : KLASS, IFkO

KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

   

Uriu

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Версии

PowerShell 1.0 -  На текущий момент совершенно неактуальная версия, интересная только для истории. /Прямые ссылки/
PowerShell 2.0 и WinRM 2.0 - Последняя версия, работающая на Windows XP и Windows 2003 (Ещё) /Прямые ссылки/
PowerShell 3.0 (Windows Management Framework 3.0)
PowerShell 4.0 (Windows Management Framework 4.0)
PowerShell 5.0 (Windows Management Framework 5.0)
PowerShell 5.1 (Windows Management Framework 5.1)
PowerShell Core 6.0 (не заменяет PowerShell 5.1)



Ассоциация

Что бы ассоциировать скрипты с PowerShell, аналогично выполнению .bat/.cmd-файлов
нужно в командной строке набрать следующую команду(ы)
Версии 1.0-5.1 для 32-битных ОС: ftype microsoft.powershellscript.1=%windir%\system32\windowspowershell\v1.0\powershell.exe -file "%1"  
%*
 
Версии 1.0-5.1 для 32-битных ОС: ftype microsoft.powershellscript.1=%windir%\sysWOW64\windowspowershell\v1.0\powershell.exe -file "%1"  
%*
 
Версия 6.0 дя 32-битной ОС: ftype microsoft.powershellscript.1="C:\Program Files (86)\PowerShell\6.0.0\pwsh.exe"  -file "%1" %*
Версия 6.0 дя 64-битной ОС: ftype microsoft.powershellscript.1="C:\Program Files\PowerShell\6.0.0\pwsh.exe"  -file "%1" %*



вопрос о подписи скриптов

Что бы PowerShell не задавал вопрос о том, что скрипты не подписаны, ввести в нем команду
set-executionpolicy unrestricted
или в командной строке
powershell Set-ExecutionPolicy Unrestricted -force
(для этих 2-х действий требуются административные права)



Прочее


  • Если используете "белый список" в брандмауэре Windows, то для работы сценариев в сети необходимо создать 2 исходящих правила для svchost.exe и PowerShell.exe.
  • В отличие от батников кодировка скриптов на PowerShell должна быть 1251 (ANSI)




Расширение возможностей PowerShell
Функции
* Write-Color
* PowerTab --- Расширение функций клавиши Tab
Провайдеры
Готовые скрипты
* Ошибки и предупреждения в журнале событий по электронной почте (в4.0)
 


Работа со сценариями в Windows PowerShell
Раздел в MSDN
Краткие справочники по Windows PowerShell 3.0 (english)
Windows PowerShell Франк Кох (БЕРН)  Разработчик и пропагандист платформы. На русском языке в формате pdf и doc

Всего записей: 340 | Зарегистр. 25-11-2004 | Отправлено: 07:13 23-03-2006 | Исправлено: KapralBel, 09:31 29-01-2018
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Richard_Nixon

Цитата:
Добавляя в планировщике

В powershell задания можно добавлять прямо из консоли...

Код:
man *job*

- выведет названия существующих файлов помощи по этой маске...
 

Цитата:
это хайвэй для скрипта.

Даже лучше... в Вашем случае, например, можно вместо пяти скриптов, создать один...
Приведу простой пример:

Код:
workflow test {
    #здесь команды не требующие параллельного выполнения
    $pth1 = "c:\test1"
    $pth2 = "c:\test2"
    parallel {
        #а здесь уже пишется блок команд, требующих распараллеливания, например, циклы
        dir $pth1 -rec
        dir $pth2 -rec
    }
}

тем самым создается рабочий процесс в текущей сессии (после закрытия сессии он будет недоступен).
Далее, можно использовать этот процесс как функцию:

Код:
test

 
А можно создать job:

Код:
test -asjob

- в отличие от обычного задания, это задание сохраняется даже после перезагрузки ОС.

Код:
get-job|receive-job

- это продемонстрирует.
 
В общем, простор для деятельности - огромный...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:00 21-03-2017 | Исправлено: YuS_2, 19:08 21-03-2017
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Убрал из шапки описание сторонних оболочек для PowerShell, так как все эти проекты, похоже, благополучно сдохли, а встроенная оболочка, наоборот, стала лучше.
 
Если что, было так:
 
Оболочки для работы с PowerShell  
* PowerShell Analyzer (бесплатный).
* PowerShellIDE для PowerShell (не развивается, бесплатный) Заметка: в их новом продукте планируется поддержка PowerShell.
* PowerGUI (бесплатный).
* PowerShell ASP (бесплатная и платная версии) PowerShell ASP запускается на ASP.NET платформе и позволяет добавлять инлайн PowerShell скрипты в веб страницах построенных с использованием HTML/XML.

----------
Разум когда-нибудь победит

Всего записей: 2719 | Зарегистр. 09-02-2003 | Отправлено: 17:09 22-03-2017
YuS_two



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis

Цитата:
Убрал из шапки описание сторонних оболочек для PowerShell, так как все эти проекты, похоже, благополучно сдохли, а встроенная оболочка, наоборот, стала лучше.


Тут ещё много чего было бы неплохо подкорректировать-добавить в местной шапке, информации мало совсем...

Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 18:24 22-03-2017
Richard_Nixon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача  работа со строками логфайла, их отбор строк по различным критериям. Но прежде лог необходимо очистить по диапазону дат. Пример лога:
Цитата:
DateTime=26.03.2017 23:22:48&I21DBN=FTPR_fulltext&C21COM=F&S21CNR=20&S21All=<.>I=ДЕПУТАТСКОЕ МЕСТО В ПАРЛАМЕНТЕ<.>&S21AllTrm=I=ДЕПУТАТСКОЕ МЕСТО В ПАРЛАМЕНТЕ|&S21FMT=urub_wn_ft&P21DBN=FTPR&S21COLORTERMS=0&RemoteHost=66.249.79.181&UserAgent=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
DateTime=26.03.2017 23:29:59&I21DBN=TEXT_fulltext&C21COM=F&S21CNR=20&S21All=<.>I=ДОПОЛНИТЕЛЬНЫЙ МЕХАНИЗМ РЕГУЛИРОВАНИЯ ТОРГОВЛИ<.>&S21AllTrm=I=ДОПОЛНИТЕЛЬНЫЙ МЕХАНИЗМ РЕГУЛИРОВАНИЯ ТОРГОВЛИ|&S21FMT=urub_wn_ft&P21DBN=TEXT&S21COLORTERMS=0&RemoteHost=66.249.79.181&UserAgent=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
DateTime=27.03.2017 8:31:56&I21DBN=FTBIB_fulltext&C21COM=F&S21CNR=20&S21All=<.>I=ПОЛЯРНЫЕ ОБЛАСТИ<.>&S21AllTrm=I=ПОЛЯРНЫЕ ОБЛАСТИ|&S21FMT=urub_wn_ft&P21DBN=FTBIB&S21COLORTERMS=0&RemoteHost=66.249.76.48&UserAgent=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
DateTime=27.03.2017 8:39:21&I21DBN=FTALL_fulltext&C21COM=F&S21CNR=20&S21All=<.>I=ПРЕДПРИЯТИЯ ТРАНСПОРТА<.>&S21AllTrm=I=ПРЕДПРИЯТИЯ ТРАНСПОРТА|&S21FMT=urub_wn_ft&P21DBN=FTALL&S21COLORTERMS=0&RemoteHost=66.249.64.143&UserAgent=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
DateTime=27.03.2017 8:49:01&I21DBN=FTLIT_fulltext&C21COM=F&S21CNR=20&S21All=<.>I=НАПРАВЛЕНИЕ ОБУЧЕНИЯ<.>&S21AllTrm=I=НАПРАВЛЕНИЕ ОБУЧЕНИЯ|&S21FMT=urub_wn_ft&P21DBN=FTLIT&S21COLORTERMS=0&RemoteHost=66.249.76.49&UserAgent=Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Оператор "Switch (value) {" для этой задачи годится? Или есть более тонкий молоток?

Всего записей: 86 | Зарегистр. 22-02-2017 | Отправлено: 17:26 27-03-2017 | Исправлено: Richard_Nixon, 17:28 27-03-2017
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Richard_Nixon
регэкспы
 
но я каждый раз их забываю.
И как пользоваться софтами типа RegexMagic, тоже забываю.
 
Чему-то одному точно следует научиться всерьёз.

Всего записей: 15598 | Зарегистр. 14-10-2001 | Отправлено: 18:10 27-03-2017
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Richard_Nixon

Цитата:
Задача

Задача-то где?
Это:

Цитата:
работа со строками логфайла, их отбор строк по различным критериям.


Цитата:
лог необходимо очистить по диапазону дат.

- не задача...
Работа со строками и отбор по различным критериям - запросто.
Что значит очистить по диапазону дат? Требуется более внятный критерий.
И собственно, поэтому ответ на вопрос:

Цитата:
Оператор "Switch (value) {" для этой задачи годится?

- лежит в плоскости постановки задачи и только...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:35 27-03-2017
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Richard_Nixon
 
Кстати, если задача маргинальная, а не является частью большого пошиковского проекта, то есть фантастическая поделка MS LogParser (халява)
и гуй у ней здесь в варезнике.
 
Умеет в логе видеть таблицу и выдавать результат SQL вопросов.
 
собственно это и есть идеология пошика - использовать всё подручное и не морочиться.

Всего записей: 15598 | Зарегистр. 14-10-2001 | Отправлено: 19:50 27-03-2017 | Исправлено: LevT, 19:53 27-03-2017
Richard_Nixon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT

Цитата:
Умеет в логе видеть таблицу и выдавать результат SQL вопросов
За отсыл спасибо, но PS не брошу. Этот "молоток любые гвозди забивает". Сегодня проекта нет, а завтра...кто знает)))
 
YuS_2 19:35 27-03-2017

Цитата:
Задача-то где?
Принято. Задача:  
 
  • На основе log файла требуется производить сбор статистики в указанном, всякий раз новом, диапазоне дат.  
  • Суммируя количество отобранных в диапазоне дат строк, записываем результат "всего обращений к БД включая внешние поисковые системы"
  • Удаляем строки соодержащие параметр "URUB", суммируем количество оставшихся после отбора строк, результат записываем как "Пользовательских обращений к БД, всего, включая загрузки, без учета обращений поисковыми системами"
  • по итогам прежнего отбора, находим строки содержащие параметр "FT_REQUEST", суммируем, результат записываем как "Всего просмотренных документов пользователями, включая скачанные".
  • находим строки с параметром "READER&C21COM", суммируем, результат записываем как "Всего просмотренных страниц документа пользователями"
  • По параметру "fulltext&C21COM=2&P21DBN", находим строки, суммируем, а результат записываем как "Всего загруженных документов пользователями из БД".
  • результат вышепроделанного формируется в отдельный текстовый файл.
     
    Logfile
     
    Уточнение по  моим условным(кривым ) терминам:
    "отбор строки" - когда остальные строки лог файла, кроме имеющих указанный параметр, можем удалить, а результат записываем в любой внешний файл.
    "находим строки" - строки оставляем, а  результат записываем в любой внешний файл.

  • Всего записей: 86 | Зарегистр. 22-02-2017 | Отправлено: 04:59 28-03-2017 | Исправлено: Richard_Nixon, 08:27 28-03-2017
    LevT



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Richard_Nixon
     
    Дя я не спорю, парсер логов хороший материал чтобы научиться регэкспам.

    Всего записей: 15598 | Зарегистр. 14-10-2001 | Отправлено: 09:05 28-03-2017
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Задача:  
     
    На основе log файла требуется производить сбор статистики в указанном, всякий раз новом, диапазоне дат.  
    Суммируя количество отобранных в диапазоне дат строк, записываем результат "всего обращений к БД включая внешние поисковые системы"  
    Удаляем строки соодержащие параметр "URUB", суммируем количество оставшихся после отбора строк, результат записываем как "Пользовательских обращений к БД, всего, включая загрузки, без учета обращений поисковыми системами"  
    по итогам прежнего отбора, находим строки содержащие параметр "FT_REQUEST", суммируем, результат записываем как "Всего просмотренных документов пользователями, включая скачанные".  

    Тут вопросов не возникло и выборку делаем примерно так:
     

    Код:
    #Фильтры
    $fexc="\burub\b"
    $finc="\bft_request\b"
     
    #Отбор строк по диапазону дат:
    $dbeg = get-date("25.03.2017")
    $dend = get-date("27.03.2017")
    $strdat = gc fulltext.log -enc UTF8|%{
        $str=get-date($($_ -replace '^.*datetime=(\d+\.\d+\.\d+)\s.*','$1'))
        if($str -le $dend -and $str -ge $dbeg){$_}
    }
    #Выборка из предыдущего результата, исключающая строки:
    $arr1 = $strdat|%{if($_ -notmatch $fexc){$_}}
    #Выборка из предыдущего результата, отбор строк по совпадению:
    $arr2 = $arr1|%{if($_ -match $finc){$_}}
     
    "всего обращений к БД включая внешние поисковые системы: "+$($strdat.count)
    "Пользовательских обращений к БД, всего, включая загрузки, без учета обращений поисковыми системами: "+$($arr1.count)
    "Всего просмотренных документов пользователями, включая скачанные: "+$($arr2.count)

     
    А вот далее:

    Цитата:
    находим строки с параметром "READER&C21COM", суммируем, результат записываем как "Всего просмотренных страниц документа пользователями"  
    По параметру "fulltext&C21COM=2&P21DBN", находим строки, суммируем, а результат записываем как "Всего загруженных документов пользователями из БД".

    - не совсем понятно из какой конкретно выборки будем получать эти строки... но, думаю, тут уже сами сможете добавить, по аналогии с другими выборками.  
    И вывод результатов в файл тоже, наверное, затруднений не составит?
     

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:18 28-03-2017
    LevT



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
     
    Зачем дурные советы?  
    Для павершеллла всё подряд удобнее обрабатывать поэлементно.
    А строки как можно раньше конвертировать в объекты.  
     
    Так что только регексп - или аналогичная регекспу самописная функция - чтобы из каждой строки лога получить содержимое нужных групп в качестве свойств объекта (хэш-таблицы)
    А дальше операции над получившимся объектом (точнее над массивом интересных объектов), тоже через встроенный итератор.

    Всего записей: 15598 | Зарегистр. 14-10-2001 | Отправлено: 12:03 28-03-2017 | Исправлено: LevT, 12:20 28-03-2017
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LevT

    Цитата:
    Зачем дурные советы?  
    Для павершеллла всё подряд удобнее обрабатывать поэлементно.

    Уважаемый, зачем глупые советы?
    Вместо того, чтобы умничать, дайте свое решение... а то: регэкспы забыл, программы не знаю, но советы раздавать умею...
     
    К сведению: при чтении строк из файла командлетом get-content, мы уже получаем объект. Да и в принципе, powershell работает с объектами, которые имеют определенные свойства, методы и прочие характеристики присущие объектам.
    Если есть желание, можете проверить:

    Код:
    $a = gc test.txt
    $a.gettype()

    и всё увидите...
    А далее, вчитайтесь в задачу и сделайте свой скрипт так, как его видите Вы...
    Критиканствовать всегда проще.

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:36 28-03-2017
    KLASS



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LevT
    YuS_2
    Глубоко вздохнули и... заканчиваем личную переписку, с переходом на личности,
    даже, если попутно обсуждаются скрипты сабжа.
    Давно изобретен ПМ (по мужски, не на толпу) для выяснений отношений.

    Всего записей: 10362 | Зарегистр. 12-10-2001 | Отправлено: 13:13 28-03-2017
    LevT



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    главная проблема пошика - обилие вот таких вот дурных примеров в интернете.
    Короче, я готов уделить некоторое время, пропорционально готовности Richard_Nixon воспринять мои советы.
    Если ему тоже вообще ничего не понятно из мною выше написанного, ему готов объяснить.
    Если он хочет.

    Всего записей: 15598 | Зарегистр. 14-10-2001 | Отправлено: 13:56 28-03-2017
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LevT
    Надо просто, без всяких если... постановка задачи есть, пример лог-файла - вон там, чуть выше.
    Что ещё надо? Вроде бы всё есть...
    Нужен только скрипт...
    Richard_Nixon новичок в powershell, который ему пришелся по душе, поэтому, думаю, он с готовностью выслушает Ваши советы в виде примера.  

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:18 28-03-2017 | Исправлено: YuS_2, 14:19 28-03-2017
    LevT



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нам интересны свойства объектов, каждый из которых представлен в виде строки. Потому контент файла целиком нерелевантен задаче: нужно добыть массив интересных объектов из отдельных строк.
     
    Надо:  
    1) достать интересные свойства - это инструмент (reusable tool)
    2) манипулировать свойствами, чтобы добыть интересную сейчас инфу - это контроллер.
     Завтра задача может поменяться, менять придётся только контроллер..
     
    Кстати, достать инфу можно не только упомянутыми регэкспами, но и через тру вей.
     
    Внимание аплодисменты!  
    Представляю киллер фичу пошика, искусственный интеллект: ConvertFrom-String
    Продукт Microsoft Research с нейронными сетями внутрях!

    Всего записей: 15598 | Зарегистр. 14-10-2001 | Отправлено: 14:40 28-03-2017 | Исправлено: LevT, 14:43 28-03-2017
    YuS_2



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LevT
    Как красиво описано, можно просто зачитаться!
    А скрипт-то где? Пример, то бишь.

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 15:13 28-03-2017
    LevT



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Может быть сегодня найду полчасика, чтобы подобрать шаблон.
    Но вы сами для начала попробуйте осилить: не хочу лишать вас удовольствия
     

    Всего записей: 15598 | Зарегистр. 14-10-2001 | Отправлено: 15:22 28-03-2017 | Исправлено: LevT, 15:28 28-03-2017
    Richard_Nixon



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LevT

    Цитата:
    Может быть сегодня найду полчасика, чтобы подобрать шаблон.
    Заинтриговали, так что уж будьте добры!
     
    YuS_2
    Во-первых скрипт отработал. Спасибо!
     

    Цитата:
    не совсем понятно из какой конкретно выборки будем получать эти строки
    Из этой же самой.  
     
    Аналогия ясна, но примеров с фильтрами пока не нашел"$finc=", появился вопрос
    Фильтры типа "$finc=" добавляем последовательно?
    $finc="\bfiltr1\b"  
    $finc="\bfiltr2\b"  
    $finc="\bfiltr3\b"  
     
    тогда не пойму как согласно синтаксиса присвоить уникальность. Что то типа:
    $finc="\bfiltr1\b"  
    $finc2="\bfiltr2\b"  
    $finc3="\bfiltr3\b"
     
    Что меня остановливает?  

    Цитата:
    #Выборка из предыдущего результата, отбор строк по совпадению:
    $arr2 = $arr1|%{if($_ -match $finc){$_}}  
    Здесь  идет отсыл к "$finc" . Скрипт будет понимать последовательность фильтров без указания  
    ID для каждого фильтра в отдельности?

    Всего записей: 86 | Зарегистр. 22-02-2017 | Отправлено: 17:01 28-03-2017 | Исправлено: Richard_Nixon, 17:28 28-03-2017
    LevT



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Richard_Nixon
     
    ну попробуйте сами-то, не будьте столь ленивы и нелюбопытны!
    help ConvertFrom-String -sh

    Всего записей: 15598 | Зарегистр. 14-10-2001 | Отправлено: 17:03 28-03-2017
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell
    KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru