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

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а какую последнюю версию WinRM, .NETFramework и PowerShell можно поставить на WinXP x86 и Win2003Server AMD64
?
 
WindowsServer2003.WindowsXP-KB936059-x64-ENU.exe
WindowsXP-KB936059-x86-ENU.exe
 
и
 
WindowsXP-KB968930-x86.exe
 
- это они?

Всего записей: 63 | Зарегистр. 21-10-2016 | Отправлено: 14:34 05-12-2016
iltmpz

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я абсолютный новичок в PowerShell (не считая вызова простейших команд типа управления exchange), но вроде более-менее знаком с 5-6 другими языками программирования и скриптовыми.
 
Сейчас пробую элементарнейшее создание своей функции и ее вызов, получаю абсолютно абсурдное поведение:

Код:
 
function func
{
echo "func entry "
return 1
}
 
$a=func
echo "echoing a:"
echo $a
echo "trying if: "
if ($a -eq 1)
{
echo "a=1"
}
echo "adding: "
$c=$a+1
echo "echoing c: "
echo $c
 

Запускаю это дело и получаю вот такой вывод:

Код:
 
echoing a:
func entry
1
trying if:
a=1
adding:
echoing c:
func entry
1
1
 

Получается:
- в момент присваивания $a=func, собственно func не вызывается!
- func вызывается в момент обращения к переменной, которой присвоено возвращаемое значение
- во время сравнения ($a -eq 1) - вызов не происходит, так же, как и во время прибавления $c=$a+1
- при выводе $c опять вызывается func!
 
Более того, если я закомментирую вызов echo:

Код:
 
function func
{
echo "func entry "
return 1
}
 
$a=func
#echo "echoing a:"
#echo $a
echo "trying if: "
if ($a -eq 1)
{
echo "a=1"
}
echo "adding: "
$c=$a+1
echo "echoing c: "
echo $c
 

Вывод такой:

Код:
 
trying if:
a=1
adding:
echoing c:
func entry
1
1
 

Получается:
- сначала func просто не отрабатывает, но 1 каким-то непостижимым образом при этом возвращает!
- далее все аналогично, функция отрабатывает именно при выводе $c, которая связана с вызываемой функцией аж через 2 ступеньки. Когда сначала было присвоено $a, потом из $a было по формуле посчитано $c...
 
Вопрос: что это вообще за издевательство и как с этим всем работать?
Прощу прощения за излишнюю эмоциональность, но вроде, в программировании не первый десяток лет, но с таким поведением языка сталкиваюсь впервые.

Всего записей: 281 | Зарегистр. 05-04-2006 | Отправлено: 13:36 16-12-2016
PhoenixUA



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Переменной $а присваивается весь вывод функции. Закомментируй echo в функции.

Всего записей: 2184 | Зарегистр. 17-11-2005 | Отправлено: 19:43 16-12-2016
Smitis



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

iltmpz

Цитата:
Прощу прощения за излишнюю эмоциональность, но вроде, в программировании не первый десяток лет, но с таким поведением языка сталкиваюсь впервые.

Я как программист Вас понимаю. Сам столкнулся. MS соскребли с других языков всё, что только можно, добавили отсебятины (как всегда), замесили это на дотнет и родили настоящий языковый ВИНЕГРЕТ. С совершенно нелогичными, с точки зрения других языков, из которых было заимствование, синтаксисом и семантикой.
 
Добавлено:
RetroSysAdmin

Цитата:
- это они?

https://support.microsoft.com/ru-ru/kb/968930

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

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 22:45 17-12-2016 | Исправлено: Smitis, 23:53 17-12-2016
YuS_2



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

Цитата:
это таймаут по какому критерию?

Это таймаут ожидания события. Почитать можно здесь.
Т.е. можно настроить ожидание события до бесконечности, указав время "-1"
 

Цитата:
т.е Ваш скрипт не работает как "robocopy" с командой "/MON:n"? И его необходимо запускать по событию батником?

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

Цитата:
Мануал PS gредлагает для подписи других скриптов использовать скрипт Add-Signature.ps1

Подписывать скрипты имеет смысл только если Вы собираетесь получить сертификат от доверенного центра сертификации, т.е. платно.
Самоподписанные скрипты, т.е. подписанные самозаверенным сертификатом не имеют большого смысла, т.к. такой сертификат будет работать только на локальной машине, а для всех остальных он не будет доверенным.  
Т.о. это только лишнее действие для скриптов созданных на локальной машине, если конечно, это не компьютер для нескольких пользователей и с отдельным администрированием.
Вообще, для Вашего случая, рекомендовал бы установить политику выполнения скриптов в remotesigned:

Код:
set-executionpolicy remotesigned

и забыть о подписи скриптов созданных на локальной машине, вопрос о подписи будет возникать только при получении сторонних скриптов.
Ну или если из соображений безопасности, всё таки требуется подпись, тогда внимательно изучить разделы about_signing, about_Execution_Policies и т.п.

Код:
man about_signing -full
man about_Execution_Policies -full

команды выполняйте по одной, можете вывести их в отдельные файлы и читать в более удобном виде.
 

Цитата:
результат всегда один, красный

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

Код:
.\file.ext

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
08:32 19-03-2017 немного скорректировал сообщение т.к. работаю прямо сейчас -  теперь там новый вариант. С краснотой разобрался, - безграмотность. Теперь подписываю нормально.

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

Цитата:
т.к. такой сертификат будет работать только на локальной машине
а большего и не нужно.
 

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



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

Цитата:
Ваш скрипт пока не работает как "robocopy" с командой "/MON:n.

Скрипт запускается? Если запускается, то он работает. Аналогии тут не совсем уместны.
 

Цитата:
Причем на последующие изменения файла даже строка не появляется. Почему интересно? Вы сами скрипт тестировали?

Не знаю, какие изменения вносятся и что у вас в пакетнике прописано. Тестировал, конечно.
Попробуйте заменить строку запуска на такую:

Код:
cmd /c start "" "d:\superbatch.bat"

 

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

если необходимо контролировать отдельные каталоги без рекурсии, то на каждый каталог запускаем отдельный скрипт. Если просто каталог с подкаталогами, то достаточно одного скрипта, надо только включить рекурсию командой:

Код:
$wtch.includesubdirectories=$true

т.е. добавить эту строку в скрипт после фильтра.
 

Цитата:
Ну а совсем в идеале, запускать не батники, а задействовать строку в этом же скрипте:

Проверить синтаксис мне не на чем, Мыши у меня нет. Но попробуйте вместо запуска батника, вот такие строки:

Код:
 
dir "$($pth)\$($res.name)"|%{$fchd=$_.fullname}
cmd /c start `"`" "`"C:\Program Files (x86)\The Bat!\thebat.exe`" /MAILU=bot@mail.ru;TO=user@mail.ru;S=БОТ-Филиал1;A=$fchd;QUEUE;SEND"
 

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Уровень знания PS не позволяет мне найти причину "молчания" скрипта на изменения файла.
естественно, основания не верить вам, что скрипт у вас работает нет.  Потому как, сама командная строка в PowerShell ISE., батники успешно отрабатывает

Цитата:
 cmd /c start "" "d:\superbatch.bat"  

Скрипт не реагирует. Что может быть причиной? Касперский? Так добавляю в доверенный, каждый отдельный пакетник.
Удивительно, что пару раз скрипт таки отработал. Как "винни пух" понимаю что где-то на уровне ОС  проблема, но сказать и  начать "снос  памятников антивирусам и брандмауэрам" пока не решаюсь.
 
Нашел статейку - Tracking Changes to a Folder Using PowerShell (там две страницы)  прочел там намеки на объявление описания расширений и теперь совсем сбит с толку.
 
 

Всего записей: 89 | Зарегистр. 22-02-2017 | Отправлено: 14:59 20-03-2017 | Исправлено: Richard_Nixon, 15:03 20-03-2017
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Richard_Nixon
Почитал обе ветки, но так и не понял в чем заключается у вас проблема
Судя по
Цитата:
Уровень знания PS не позволяет мне найти причину "молчания" скрипта на изменения файла.  

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

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 15:07 20-03-2017
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
       

    Страницы: 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