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

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

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

Цитата:
изначально задача стояла добавить в задачу конкретную дату выполнения


Цитата:
А можно указать конкретную дату каждого месяца

Давайте, для начала, внятно сформулируем что нужно:
 
 Варианты:  
       - Однократно создать задачу по готовому шаблону (выгруженному файлу .xml с заданием) задавая только дату/время выполнения задания;
       - менять условия выполнения планировщиком задания (в том числе: время, дату, периодичность, etc ...);
       - иное;
 
... А то постановка задачи невнятная - с постоянно обновляемыми "хотелками" )))  
 
 
Добавлено:
Если хотите гибко работать с графиком выполнения задания, то рассмотрите структуру секции Triggers в xml-файле.  
Формируйте соответствующие строки, с необходимым Вам графиком, заменяйте в исходном файле, далее как обычно - импорт в ПланировщикЗаданий.
Вот пример секции Triggers - всё достаточно наглядно и, на мой взгляд, несложно:
  "Начать выполнение с 1 января 2000 года, в 8ч 6мин, далее выполнять каждый первый понедельник с января по декабрь"

Код:
 
<Triggers>
    <CalendarTrigger>
      <StartBoundary>2000-01-01T08:06:00</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByMonthDayOfWeek>
        <Weeks>
          <Week>1</Week>
        </Weeks>
        <DaysOfWeek>
          <Monday />
        </DaysOfWeek>
        <Months>
          <January />
          <February />
          <March />
          <April />
          <May />
          <June />
          <July />
          <August />
          <September />
          <October />
          <November />
          <December />
        </Months>
      </ScheduleByMonthDayOfWeek>
    </CalendarTrigger>
  </Triggers>
 

Всего записей: 3482 | Зарегистр. 09-09-2003 | Отправлено: 11:48 19-09-2017 | Исправлено: 2as, 12:09 19-09-2017
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2as
Да, я немного нечетко выразился сначала. Мне бы все-таки удобнее было добавить дату через PS, как я указал во втором посте, чтобы избежать импортирования XML-файла.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 12:54 19-09-2017
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
 
Я б сначала попытался использовать New-ScheduledTaskTrigger  
 
а затем принял во внимание существование такого:
http://get-carbon.org/Carbon_ScheduledTask.html
Чтобы не использовать и то, и другое - должны быть Очень веские основания!
 
Carbon вообще полезный для Ваших задач модуль.
Когда наиграетесь с изучением "шестерёнок", переписать всё на нём облегчит дальнейшую поддержку Ваших скриптов.
 
 
Что до интереса к шестерёнкам, важно иметь в виду, что в пошике доступны xml DOM,  

Код:
 
[xml]$task = $xml
$task.Task.Triggers.CalendarTrigger.StartBoundary
2017-09-18T09:00:00+03:00
 

и запросы XPath (см. напр. help Select-XML)
 
 
Добавлено:
 
В то же время всё это оверкилл, если нужно примитивно отредактировать xml-прототип: тут достаточно поиска-замены.
 
Проблема в оценке: впрямь ли затеянная хирургия примитивна? останется ли таковой при изменившихся требованиях? не превратится ли в членовредительство при изменившихся данных?  
Если есть сомнения в ответе, то никаких текстовых операций в структурированных данных!  

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 13:07 19-09-2017 | Исправлено: LevT, 13:39 19-09-2017
2as

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

Цитата:
Мне бы все-таки удобнее было добавить дату через PS, как я указал во втором посте, чтобы избежать импортирования XML-файла.

тогда используйте решения, которые Вам предлагает LevT

Всего записей: 3482 | Зарегистр. 09-09-2003 | Отправлено: 14:29 19-09-2017
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2as
Я немного другим путем пошел.
Новый вопрос

Код:
 
$action = New-ScheduledTaskAction -Execute "Powershell.exe" -Argument "$getservice = Get-Service -Name wuauserv; If($getservice.Status -eq 'Running') {Start-Sleep -s 10; Start-Process -FilePath D:\Программы\Прочее\1.bat} Else {Start-Process -FilePath D:\1.bat}"
$trigger =  New-ScheduledTaskTrigger -Weekly -At 9am -DaysOfWeek Thursday -WeeksInterval 4
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable
$principal = New-ScheduledTaskPrincipal -UserID System -RunLevel Highest
$params = @{
"TaskName"  = "Office"
"Action"    = $action
"Trigger"   = $trigger
"Settings"  = $settings
"Principal" = $principal
}
Register-ScheduledTask @Params -Force
 

В 1.bat одна строка break>"%userprofile%\Desktop\dblank.txt".

Код:
 
$getservice = Get-Service -Name wuauserv; If($getservice.Status -eq 'Running') {Start-Sleep -s 10; Start-Process -FilePath D:\Программы\Прочее\1.bat} Else {Start-Process -FilePath D:\Программы\Прочее\1.bat}
 

Работает. Где я ошибся в 1 строке?..

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 19:01 20-09-2017 | Исправлено: farag, 19:27 20-09-2017
2as

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

Всего записей: 3482 | Зарегистр. 09-09-2003 | Отправлено: 19:50 20-09-2017 | Исправлено: 2as, 20:34 20-09-2017
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2as
PS ISE пытается при добавлении задачи сразу почему-то запустить батник. А в Планировщике вместо всего аргумента к powershell.exe выставляется "System.ServiceProcess.ServiceController".

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 20:13 20-09-2017
LevT



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

Цитата:
В 1.bat одна строка break>"%userprofile%\Desktop\dblank.txt".  

это что такое и зачем?
 
На всякий случай напомню, что в PS есть  
 

Код:
 
Start-Transcript -Path %userprofile%\Desktop\pslog.txt  
...
Stop-Transcript
 

 
Добавлено:

Цитата:
сверху {Start-Process -FilePath D:\1.bat}
снизу {Start-Process -FilePath D:\Программы\Прочее\1.bat}  

так и было задумано?

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 20:26 20-09-2017 | Исправлено: LevT, 20:27 20-09-2017
farag



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

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 20:57 20-09-2017
2as

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

Код:
 
$action = New-ScheduledTaskAction -Execute "Powershell.exe" -Argument "$getservice = Get-Service -Name wuauserv; If($getservice.Status -eq 'Running') {Start-Sleep -s 10; Start-Process -FilePath D:\Программы\Прочее\1.bat} Else {Start-Process -FilePath D:\1.bat}"  
...
 

...  

Цитата:
PS ISE пытается при добавлении задачи сразу почему-то запустить батник.

1. ну не PS ISE, а просто PS? (или Вы про процедуру отладки в ISE?)
2. попробуйте вот так:
   a.
Код:
 
$action = New-ScheduledTaskAction -Execute "Powershell.exe" -Argument "-Command {$getservice = Get-Service -Name wuauserv; If($getservice.Status -eq 'Running') {Start-Sleep -s 10; Start-Process -FilePath D:\Программы\Прочее\1.bat} Else {Start-Process -FilePath D:\1.bat}}"
 
или
   б. блок операторов:  

Код:
$getservice = Get-Service -Name wuauserv; If($getservice.Status -eq 'Running') {Start-Sleep -s 10; Start-Process -FilePath D:\Программы\Прочее\1.bat} Else {Start-Process -FilePath D:\1.bat}
сохранить, например в D:\Test\file.ps1,  тогда
 
Код:
$action = New-ScheduledTaskAction -Execute "Powershell.exe" -Argument '-File D:\Test\file.ps1'
...
 

 
P.S. К сожалению у меня Win7, не могу протестировать у себя работу командлета  "New-ScheduledTaskAction"

Всего записей: 3482 | Зарегистр. 09-09-2003 | Отправлено: 21:01 20-09-2017 | Исправлено: 2as, 21:10 20-09-2017
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2as
Ничегошеньки не происходит. А при добавлении в Планировщике аргумент делается таким:

Код:
 
-Command {System.ServiceProcess.ServiceController = Get-Service -Name wuauserv; If(System.ServiceProcess.ServiceController.Status -eq 'Running') {Start-Sleep -s 10; Start-Process -FilePath D:\Программы\Прочее\1.bat} Else {Start-Process -FilePath D:\1.bat}}
 

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 21:17 20-09-2017
LevT



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

Цитата:
P.S. К сожалению у меня Win7, не могу протестировать у себя работу командлета  "New-ScheduledTaskAction"
 

 
Зато можете попробовать PSScheduledJob-ы
https://blogs.technet.microsoft.com/heyscriptingguy/2014/03/05/powershell-jobs-week-scheduled-jobs/
 
а я пошёл читать всю серию...

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 21:28 20-09-2017
farag



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

Цитата:
PSScheduledJob-ы  

Это тоже что-то в планировщике задач?

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 21:45 20-09-2017
LevT



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

Цитата:
 
Your scheduled jobs can be found in the Task Scheduler under:
\Microsoft\Windows\PowerShell\ScheduledJobs
 

из статьи по ссылке

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 21:48 20-09-2017
farag



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

Цитата:
\Microsoft\Windows\PowerShell\ScheduledJobs  

Если раздела PowerShell нет, значит, оно потом создаться?

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 21:50 20-09-2017
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну так и джобов этих нет, наверное стоит попробовать создать
 
Добавлено:
 
мне пока непонятно как соотносится существование триггера -AtStartup с тем, что джобы хранятся в профиле пользователя который их накрутил

Цитата:
1) You can only see the jobs that you create and run in your context due to the way scheduled jobs and output is stored in your profile.

 
 
Добавлено:
вроде как это относится (только?) к персистентным результатам...

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 21:56 20-09-2017
farag



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я все-таки хочу понять, почему не исполняется батник. Но силы покидают...

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 22:06 20-09-2017
LevT



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

Вдруг поможет это чтение
https://blogs.technet.microsoft.com/heyscriptingguy/2015/01/13/use-powershell-to-create-scheduled-tasks/

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 22:13 20-09-2017
2as

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

Цитата:
Зато можете попробовать PSScheduledJob-ы

Спасибо за ссыль! )
Сподоблюсь может быть - сейчас несколько другим занимаюсь, не до PS пока.
Завидую порой тем, кто может позволить себе роскошь заниматься одним направлением. )
 
farag

Цитата:
при добавлении в Планировщике аргумент делается таким:

Ну должен быть каким? Вы какого результата ждете?
Насколько я понимаю, Вы хотите:
 - создать (средствами PS) задачу в Планировщике "Выполнить в определенное время то-то, то-то"
 - конкретно, должен запуститься PS и выполнить код, тот что после -Command (или в файле)
Так?
Если не так, тогда сформулируйте по шагам задачу, зачем, что и как.  
Тогда будет проще и Вам и тем, кто пытается помочь.  
...
P.S. Могу посоветовать разбить задачу на два этапа:
1. Создайте в Планировщике задание вручную - с нужными Вам аргументами, правами и т.д. Добейтесь его работоспособности.
(можете затем его выгрузить в .xml - будет контрольным примером).
2. После успешного завершения п.1 создайте такое же задание скриптом PS.  
После этого проверьте работу в комплексе,  
а. формирование задачи в планировщике и отработку его в определенное Вами время...

Всего записей: 3482 | Зарегистр. 09-09-2003 | Отправлено: 05:18 21-09-2017 | Исправлено: 2as, 05:30 21-09-2017
farag



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

Цитата:
Планировщике аргумент делается таким:  

Это уже прошло.

Цитата:
 разбить задачу на два этапа

Не выйдет: мне необходима проверка, работает ли служба обновления, и только если не работает, запускать батник. Вот, собственно, что мне надо. Я могу и с помощью XML импортировать, но тогда я не смогу добавить проверку службы. Проблема сейчас в том, что ни один батник при добавлении условия на проверку службы не запускается. В тупую батник работает из Планировщика.
А само по себе

Код:
 
Get-Service -Name wuauserv; If($getservice.Status -eq 'Running') {Start-Sleep -s 10; Start-Process -FilePath D:\Программы\Прочее\1.bat} Else {Start-Process -FilePath D:\Программы\Прочее\1.bat}
 

Значит, где-то ошибка у меня кавычках или в чем-то другом.
 
Ответили на StackOverflow:

Код:
 
$action = New-ScheduledTaskAction -Execute "Powershell.exe" -Argument "`$getservice = Get-Service -Name wuauserv; If(`$getservice.Status -eq 'Running') {Start-Sleep -s 10; Start-Process -FilePath D:\1.bat} Else {Start-Process -FilePath D:\1.bat}"
 

Вроде, все выполняется. Дело было в escape-символе.

Всего записей: 2474 | Зарегистр. 27-07-2009 | Отправлено: 11:58 21-09-2017 | Исправлено: farag, 12:14 21-09-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