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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2

Цитата:
out-file out.txt -enc default -force

Большое человеческое спасибо!

Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 18:02 29-03-2017
Richard_Nixon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
 
Задача преподнесла мне еще один сюрприз в виде разделенного лога, а именно по достижении критической массы в 9766кб
лог файла с именем fulltext.log", вебсервер переименовывает по маске в  "fulltext_copy_DD.MM.YYYY.log", и создает "чистый", новый файл fulltext.log. Очевидно, что в этом случае, временные периоды будут разделены между двумя лог файлами.  
 
Отбор строк по диапазону дат мы задаем одному файлу:

Цитата:
$dbeg = get-date("01.03.2017")
$dend = get-date("31.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){$_}

Допустимо ли, наряду с диапазоном дат задавать, перечень файлов и путь к ним? Например так:

Цитата:
$strdat = gc "D:\base\fulltext.log", "D:\base\fulltext_copy_DD.MM.YYYY.log" -enc UTF8|%{
    $str=get-date($($_ -replace '^.*datetime=(\d+\.\d+\.\d+)\s.*','$1'))
    if($str -le $dend -and $str -ge $dbeg){$_}

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



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

Цитата:
перечень файлов и путь к ним?

Легко:

Код:
$strdat = gc "D:\base\*.log" -enc UTF8|...

 
Вообще, можно по всем командлетам вызывать справку с примерами:

Код:
man <командлет или алиас> -full

 
в данном случае:

Код:
man gc -full

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



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

Цитата:
Легко:  

поскольку имя нового файла-лога неизвестно похоже еще и какие-то манипуляции с выборкой файла по маске нужно? В пакетниках это действительно легко, а тут пока не очевидно. Логов в корневом каталоге много....хотя, в них не те виды строк, а значит.. ерунда, отработает. Спасибо.
 

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



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

Цитата:
похоже еще и какие-то манипуляции с выборкой файла по маске нужно?

Предварительно, можно делать отбор необходимых файлов... выше, пост дополнил по поводу встроенной справки, там есть пример как делать отбор файлов:

Код:
dir "D:\base\*.log"|%{здесь производим отбор файлов по каким-либо критериям и применяем к ним командлет gc}

и далее уже передаем по конвееру отобранный контент необходимых файлов...

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



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

Цитата:
в данном случае man gc -full  

Вчера LevT уже порекомендовал справку по строке с командой ее обновления. "Покрутил в руках"  - действительно отличный помощник.

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



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

Цитата:
действительно отличный помощник

Ну, мануалы - всегда первейший помощник, тут Америку открыть сложно . А вот если уже там что-либо непонятно, тогда интернет, форумы... да и вообще, любой достоверный источник информации, всегда должны быть под рукой.
 
Добавлено:
Richard_Nixon  30-03-2017

Цитата:
В пакетниках это действительно легко, а тут пока не очевидно.

Кстати, возможно, будет достаточно такой маски:

Код:
$strdat = gc "D:\base\fulltext*.log" -enc UTF8|...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:22 30-03-2017 | Исправлено: YuS_2, 08:23 30-03-2017
LevT



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

Цитата:
Задача преподнесла мне еще один сюрприз в виде разделенного лога,  

 
вот такой процесс подойдёт?
он исчерпывающий - или ещё возможны сюрпризы
 

Код:
 
$scriptblock = {
......
}
 
Get-MyLogFiles | Get-MyLogRecords | Get-MyLogData  -Filter $scriptblock | Select-MyInterestingThings | Out-MyInterestingThings
 
 

Здесь командлетам Get полные данные не нужны: агрегировать интересное будет предпоследний командлет.
Об окружающей среде будут знать только первый и последний командлеты: остальные - чистые функции, которые отработают на любых данных правильного типа

 
если подойдёт, то следующий шаг - согласование параметров каждого командлета и того, что он выплёвывает в "трубу"
возможно, придётся "отрефакторить" (слить воедино почти пустые командлеты или разделить те, что занимаются _разными_ вещами внутри себя)
 
 
 
 
 
Добавлено:
YuS_2

Цитата:
да и вообще, любой достоверный источник информации, всегда должны быть под рукой.  

 
покамест руборду очень далеко до stackoverflow  
справка точно лучше

Всего записей: 17149 | Зарегистр. 14-10-2001 | Отправлено: 09:39 30-03-2017 | Исправлено: LevT, 19:52 30-03-2017
Richard_Nixon



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытаюсь переименовать файл по дате, пните пожалуйста.

Цитата:
$n3 = -$(get-date -Format {yyyy-MM-dd}).txt
$query = "SELECT * FROM CIM_Datafile WHERE Name='D:\\DROPBOX\\Dropbox\\Статистика электронных ресурсов\\нэб\\out.txt'"
$NewName = 'D:\DROPBOX\Dropbox\Статистика электронных ресурсов\нэб\$n3'
Invoke-CimMethod -Query $query -MethodName Rename -Arguments @{FileName=$n3}

 

Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 10:22 30-03-2017
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Richard_Nixon
 
что-то я не врубаюсь, а зачем CIM для переименования локальных файлов?
 
Есть gcm *-Item* - общие команды для манипуляции файловой системой и прочими иерархическими данными типа реестра (если для них есть Get-PSProvider)
 

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



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

Цитата:
Есть gcm *-Item*

спс

Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 10:36 30-03-2017
YuS_2



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

Цитата:
Пытаюсь переименовать файл по дате

Тут лучше опишите, что именно пытаетесь переименовать... или что пытаетесь получить этими командами.
а короткий формат даты можно получить так:

Код:
$(get-date -f d)

- это текущая дата...

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



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Richard_Nixon
 
CIM дико полезная вещь.
Эксперт Richard Siddaway утверждает, что если вы его не умеете, вы пошик используете процентов на 40
Но я например до сих пор не могу сказать, что умею (изучить систематически только предстоит)
 
Но и из пушки по воробьям нехрен.

Всего записей: 17149 | Зарегистр. 14-10-2001 | Отправлено: 10:39 30-03-2017
Richard_Nixon



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

Цитата:
это текущая дата...

Именно это и нужно. Созданный известным вам скриптом текстовый файл тут же переименовать по маске текущего дня.

Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 10:42 30-03-2017
YuS_2



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

Цитата:
Созданный известным вам скриптом текстовый файл тут же переименовать по маске текущего дня.

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

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



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

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

Цитата:
$strdat = gc "D:\base\fulltext*.log" -enc UTF8|...  

У меня пока на ум приходит что-то типа этого:
$strdat = gc "D:\base\$3" -enc UTF8
$n3 = -$((get-date -Format {yyyy-MM-dd}).txt)
 
 
Добавлено:
LevT

Цитата:
CIM дико полезная вещ
прочитал о нем там, где вы не советовали, в гугле ))Там же и пример живой был.

Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 10:48 30-03-2017 | Исправлено: Richard_Nixon, 11:01 30-03-2017
YuS_2



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

Цитата:
В этой строке?

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

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



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

Цитата:
требуется переименовать выходной файл со статистикой, созданный самим скриптом?

Да. Этим сейчас и занят.

Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 11:16 30-03-2017
YuS_2



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

Цитата:
Да.


Код:
...|out-file "out_$(get-date -f d).txt" -enc default -force

 
Вот так:

Код:
$(get-date -f dd.MM.yyyy_HH-mm)

-с часами-минутами

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:23 30-03-2017 | Исправлено: YuS_2, 11:29 30-03-2017
Richard_Nixon



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

Цитата:
с часами-минутами  

знание -сила!  
Пошел штудировать функции. Спасибо вам за терпение.

Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 12:46 30-03-2017 | Исправлено: Richard_Nixon, 12:54 30-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