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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Richard_Nixon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
  • Задача: запускать батник или строку (в этом примере батник) по изменению файла xlsx в заданной папке:
  • Предложен был скриптYuS_2
     

    Цитата:
    $pth = "D:\DROPBOX\Dropbox\1SUPPORT\1filial"
    # Таймаут (в мс.)
    $tout = 1000
    $wtch = new-object system.io.filesystemwatcher
    $wtch.path = $pth
    $wtch.filter = "*.xlsx"
    do {
        $res = $wtch.waitforchanged("changed", $tout)
        if ($res.timedout -eq $false){
            cmd /c start "" "D:\Distr\batfiles\great.cmd"
        }
    } until ([system.console]::keyavailabl

     
    Добавлено:
    Результат: отрабатывает периодически. Из 50 попыток 5 успешных. Из строки PS пакетники запускаются без проблем. Если имеется возможность, откатайте пожалуйста скрипт у себя. У меня он тестируется на ОС WS2008R2.
    Как я тестирую: Изменяю файл в Dropbox на другом ПК - сохраняю. По удаленке вижу факт изменения файла в Dropbox~е на тестируемом ПК.
    Отслеживаю запуск пакетника.
     
    Добавлено:
    Подробнее...

  • Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 15:52 20-03-2017 | Исправлено: Richard_Nixon, 17:24 20-03-2017
    YuS_2



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

    Цитата:
    прочел там намеки на объявление описания расширений и теперь совсем сбит с толку.

    Хорошая статья, там описано как более корректно использовать системное событие... т.е. используется слежение сразу за несколькими событиями, не только изменение файла.
    Про расширение там нет ничего путающего. Это просто вывод различных сообщений в зависимости от расширения файла.
     

    Цитата:
    Из 50 попыток 5 успешных.

    А вот это странно... попробуйте в cmd пакетнике прописать, что-либо более простое, а не отправку почты, типа:

    Код:
    echo successful!!!
    pause

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

    Код:
    cmd /c start `"`" `"D:\Distr\batfiles\great.cmd`"

    Чтобы кавычки были переданы в процесс cmd.exe

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Ну что. кажется я выхожу на свою проблему, только решение ее все также не очевидно.
    Вот тут такой же как я, пишет (только в моем случае Dropbox, в его случае сетевой каталог) что
    Цитата:
    Мне нужно видеть, когда файл записывается в каталог. Этот каталог находится на подключенном сетевом диске на сервере Windows 2003. Если скопировать файлы в этот каталог на сервере, он работает. Если я пишу файлы удаленно, он не работает. Что я могу сделать, чтобы заставить его работать, когда файлы записываются удаленно? Я хотел бы сохранить это как уведомление о событии, но в случае необходимости будет меняться к методу опроса. Если то правильный способ сделать это, мне нужно немного лучший совет практики. Любая деталь я могу получить о том, как работают уведомления о записи файлов Windows "приветствуется.

     
    Добавлено:
    P.S. Действительно, при копировании, изменении файла непосредственно на компьютере где работает мой скрипт, он добросовестно отрабатывает. В статье человеку задали вопрос Further, is the .net API matched in the PowerShell API?  Я устанавливал 4 версию PowerShell. В системе WS2008R2 netframework 4 версии.
    Цитата:
    Чтобы кавычки были переданы в процесс cmd.exe
    С этим параметром и без него, аналогичная история.

    Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 18:10 20-03-2017 | Исправлено: Richard_Nixon, 19:08 20-03-2017
    YuS_2



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

    Цитата:
    Действительно, при копировании, изменении файла непосредственно на компьютере где работает мой скрипт, он добросовестно отрабатывает.  

    Тогда, возможно, проблема, всё же, в Dropbox, а не в powershell и .net? Тем более, что скрипт иногда отрабатывает...  
    Тут ведь всё просто: есть событие - скрипт отработает, нет события - на нет и суда нет...
     

    Цитата:
    в его случае сетевой каталог

    На сетевом каталоге, хоть и не в серверном варианте, проверил - всё отрабатывает один к одному.
     
    ЗЫ Попробуйте увеличить буфер, дописав команду после фильтра, но до цикла:

    Код:
    $wtch.internalbuffersize = 16384

    и включить сбор событий

    Код:
    $wtch.enableraisingevents = $true

    Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 19:16 20-03-2017 | Исправлено: YuS_2, 22:19 20-03-2017
    Richard_Nixon



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

    Цитата:
    Попробуйте увеличить буфер


    Цитата:
    и включить сбор событий  

    10 сообщений - полет нормальный. Подобных скриптов будет пять, т.к. мониторить нужно каждый каталог в отдельности. Иду читать матчать по по автозапуску скриптов. Если есть что "бросить" на этот счет в качестве напутствия - буду очень благодарен. Большое вам человеческое спасибо за своевременную помощь бездарю.

    Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 07:37 21-03-2017 | Исправлено: Richard_Nixon, 07:44 21-03-2017
    YuS_2



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

    Цитата:
    Если есть что "бросить" на этот счет в качестве напутствия

    Велосипед изобретать не буду, всё уже написано до меня...
    Вот тут неплохой ресурс со статьями:
    Запуск PowerShell скриптов по расписанию
    а лучше отсюда читать:
    ссылка
     
    В принципе, если погуглить с конкретными вопросами, то вываливаются списки со статьями о powershell по-русски и даже с очень хорошим описанием...

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



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

    Цитата:
    10 сообщений - полет нормальный

     
    Так, пока я был далеко от компа, проблема решена? или все равно порыскать?

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 08:32 21-03-2017
    Richard_Nixon



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

    Цитата:
    Вот тут неплохой ресурс со статьями:
    Да это инструментище...спасибо.
     
    KapralBel

    Цитата:
    Так, пока я был далеко от компа, проблема решена? или все равно порыскать?  
    Скрипт уже отрабатывает.

    Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 09:46 21-03-2017 | Исправлено: Richard_Nixon, 09:55 21-03-2017
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Richard_Nixon
    Ясно, приношу извинения что вечером у меня так и не хватил сил добраться до компа

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 10:16 21-03-2017
    YuS_2



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

    Цитата:
    Да это инструментище

    Ну и ещё на десерт, в смысле на будущее:
    Распараллеливание

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuS_2
    Сегодня история имела забавное продолжение. Добавляя в планировщике, в качестве аргумента для запуска powershell, имя скрипта, долго не мог понять почему задание не отрабатывает, хотя статус - "работает".  Видимо кому-то наверху было угодно, чтобы я изучил все действующие в заданиях аргументы, а проблема решилась удивительным образом, как только я поменял кавычки, используя при этом английскую раскладку. Привычка использовать цифру "2" в раскладке, аукнулась именно сейчас. Ну да ладно. Спасибо за ваше терпение.

    Цитата:
    Распараллеливание
    Да это хайвэй для скрипта.  
     
    KapralBel

    Цитата:
    у меня так и не хватил сил добраться до компа
    Мелочи. Вчера и сайт работал нестабильно. Удивительно что человек, вообще, мне смог ответить.
     

    Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 15:29 21-03-2017 | Исправлено: Richard_Nixon, 23:49 21-03-2017
    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.

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

    Всего записей: 3234 | Зарегистр. 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) {" для этой задачи годится? Или есть более тонкий молоток?

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



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

    Всего записей: 17211 | Зарегистр. 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 вопросов.
     
    собственно это и есть идеология пошика - использовать всё подручное и не морочиться.

    Всего записей: 17211 | Зарегистр. 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
     
    Уточнение по  моим условным(кривым ) терминам:
    "отбор строки" - когда остальные строки лог файла, кроме имеющих указанный параметр, можем удалить, а результат записываем в любой внешний файл.
    "находим строки" - строки оставляем, а  результат записываем в любой внешний файл.

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



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

    Всего записей: 17211 | Зарегистр. 14-10-2001 | Отправлено: 09:05 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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru