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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11112 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
Smitis



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

Цитата:
Подскажите, как можно проще всего решить следующую задачу на классических bat-файлах, без PS

Не знаю, как получить текущее время в UTC. Локальное время можно получить через wmic.exe OS get LocalDateTime. Если устроит, то примерно так:

Код:
@echo off
set "src=откуда"
set "dst=куда"
set "static=%temp%\static.txt"
 
:: Формируем общую часть
echo заданный статический текст>%static%
for /f "delims=. tokens=1,2" %%t in ('wmic.exe OS get LocalDateTime ^| find "."') do set "DateTime=%%t%%u"
echo %DateTime:~0,8%-%DateTime:~8,6%-%DateTime:~6,2% %DateTime:~8,2%:%DateTime:~10,2%:%DateTime:~12,2%>>%static%
 
:: Обрабатываем файлы
md "%dst%" 2> nul
:cd /d "%src%"
for %%? in ("%src%\*") do (
    echo %%~f?
    copy /b/y "%static%"+"%%~f?" "%dst%\%%~nx?"
    if exist "%dst%\%%~nx?" del "%%~f?"
)
del "%static%"

 
П.С.
Можно получить время UTC через wmic.exe path win32_UTCTime get * /value, но почему-то без миллисекунд.

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

Всего записей: 3214 | Зарегистр. 09-02-2003 | Отправлено: 13:31 18-08-2019 | Исправлено: Smitis, 13:59 18-08-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
 
Забыл добавить, что в случае нормальных имён полей СЛЕВА вовсе нет нужды злоупотреблять кавычками
 
$params = @{  
    TaskName    = "2C"  
    Action    = $action  
    Trigger    = $trigger  
    Settings    = $settings  
    Principal    = $principal  
}
 
Справа от присваивания кавычки "" действуют как вызов.
Наряду с $ и & {}
Каждое из этих трёх является вызовом определённого сервиса внутри PS движка:  
 
"string" - подстановка в строке,  
$var - разыменование переменной, в т.ч. можно через $ достать функцию из модуля
& $scriptblock - т.н. замыкание: скриптблок вычисляется кажый раз, когда до него доходит поток выполнения, и получает от движка актуальное на тот момент окружение.

Всего записей: 17149 | Зарегистр. 14-10-2001 | Отправлено: 14:15 18-08-2019 | Исправлено: LevT, 15:11 18-08-2019
YuS_2



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

Цитата:
там быстрее ответят.

Да ответить-то можно и здесь запросто, только CMD не обучен работать с текстом и датами, придется извращаться, а зачем? Вот в чем вопрос...
Не знаю, но пользоваться абаком, когда калькулятор под рукой - извращение то ещё...
 

Цитата:
Проблем нет, на это только требуется 6 разделов справки

Без труда и кавычки пнуть не получится.
В том смысле, что без справки, только на интуиции, много и хороших скриптов не получится написать... имхо.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:46 18-08-2019
VVL99

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

Код:
:cd /d "%src%"

Я просто не пойму.

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 15:31 18-08-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Доки наше всё.  
Но когда об одном и том же, в разных местах, с исключениями из правил, дополнительными правилами и исключениями в них…
А хочется то светлой любви а она ишь с кузнецом приходит простой четкой, понятной, действующей везде инструкци

Всего записей: 3519 | Зарегистр. 16-08-2012 | Отправлено: 16:43 18-08-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
 
Доки командлетов ничего не говорят о злоупотреблениях.
Когда powershell.exe передаётся вместо строки аргументов нечто, от чего писателем ожидается поведение шелл-скрипта.
 
Строка аргументов этого экзешника документирована (Сюрприз!) в хелпе к нему.
 
 
Добавлено:
 
Неужели сложно понять, что каждая программа по-своему интерпретирует переданные её аргументы?
Архиглупо ждать от powershell чужого поведения - например аля cmd - игнорируя выдачу хелпа именно этой проги (powershell.exe):
 
Итак, на выбор два варианта

Цитата:
 
-File
    Runs the specified script in the local scope ("dot-sourced"), so that the
    functions and variables that the script creates are available in the
    current session. Enter the script file path and any parameters.
    File must be the last parameter in the command, because all characters
    typed after the File parameter name are interpreted
    as the script file path followed by the script parameters.
 
-Command
    Executes the specified commands (and any parameters) as though they were
    typed at the Windows PowerShell command prompt, and then exits, unless
    NoExit is specified. The value of Command can be "-", a string. or a
    script block.
        ...
    If the value of Command is a string, Command must be the last parameter
    in the command , because any characters typed after the command are
    interpreted as the command arguments.
 
    To write a string that runs a Windows PowerShell command, use the format:
        "& {<command>}"
    where the quotation marks indicate a string and the invoke operator (&)
    causes the command to be executed
.
 

Всего записей: 17149 | Зарегистр. 14-10-2001 | Отправлено: 17:37 18-08-2019 | Исправлено: LevT, 19:31 18-08-2019
Smitis



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

Цитата:
А это правильно?

Это, типа, закомментировано. Строчку можно удалить.

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

Всего записей: 3214 | Зарегистр. 09-02-2003 | Отправлено: 20:28 18-08-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis (пост)
Цитата:
Это, типа, закомментировано. Строчку можно удалить.
Теперь ясно, а вообще зачем оно там? Мы же со ссылкой работаем или бывают случаи.

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 21:04 18-08-2019 | Исправлено: VVL99, 22:41 18-08-2019
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
VVL99
Хотел сделать так, потом сделал по-другому и забыл удалить.

Цитата:
Мы же со ссылкой работаем или бывают случаи.

Не понял про ссылки.
 
Получить время в UTC можно таким хитрым способом

Код:
for /f %%? in ('wmic.exe path Win32_UTCTime get * /value') do >nul set "%%?"
set "Hour=0%Hour%"
set "Hour=%Hour:~-2%"
set "Minute=0%Minute%"
set "Minute=%Minute:~-2%"
set "Second=0%Second%"
set "Second=%Second:~-2%"
set "Day=0%Day%"
set "Day=%Day:~-2%"
set "Month=0%Month%"
set "Month=%Month:~-2%"
echo %Year%-%Month%-%Day% %Hour%:%Minute%:%Second%

Но миллисекунды (если нужны) почему-то так на получаются.

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

Всего записей: 3214 | Зарегистр. 09-02-2003 | Отправлено: 22:11 18-08-2019
varbasik

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что не так с этим скриптом?
В ISE срабатывает, но колонка со статусом соединения в "крякозяблах".
Если запустить скрипт по правой кнопке, заголовок нормальный, но в значениях - пустая таблица.
 
RDS_session.ps1

Всего записей: 226 | Зарегистр. 02-07-2009 | Отправлено: 11:07 19-08-2019 | Исправлено: varbasik, 11:08 19-08-2019
YuS_2



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

Цитата:
Что не так с этим скриптом?

Всё не так.  
А это вообще не должно работать:

Код:
$(qwinsta.exe | findstr "Активно") -replace "^[\s>]" , "" -replace "\s+" , "," | ConvertFrom-Csv -Header $Header| ...
 

Надо, как минимум, так:

Код:
$(qwinsta.exe |?{$_ -match "Активно"}) -replace "^[\s>]" -replace "\s+",","| ConvertFrom-Csv -Header $Header| ...

 
Ну и для начала, было бы неплохо описать конечную цель...
Если цель - получить таблицу, то проще сделать так:

Код:
$Header = "SESSIONNAME", "USERNAME", "ID", "STATUS"
$(qwinsta.exe |?{$_ -match "Активно"}) -replace "^[\s>]" -replace "\s+",","| ConvertFrom-Csv -Header $Header|ogv

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 13:09 19-08-2019 | Исправлено: YuS_2, 14:58 19-08-2019
ipmanyak



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
Цитата:
Но миллисекунды (если нужны) почему-то так на получаются.

не получается потому в ответе миллисекунд нет.

Код:
 
E:\>wmic.exe path Win32_UTCTime get /value
Day=19
DayOfWeek=1
Hour=11
Milliseconds=
Minute=53
Month=8
Quarter=3
Second=44
WeekInMonth=4
Year=2019
 
 



----------
В сортире лучше быть юзером, чем админом...

Всего записей: 11735 | Зарегистр. 10-12-2003 | Отправлено: 14:53 19-08-2019 | Исправлено: ipmanyak, 14:54 19-08-2019
farag



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

Цитата:
То бишь, кавычки должны быть одинарным, в смысле двойными, но не удвоенными (сорри за каламбур ):

Тоже нет.

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 15:05 19-08-2019
YuS_2



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

Цитата:
Тоже нет.  

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

Цитата:
New-ScheduledTaskAction
Краткий обзор
    Creates a scheduled task action.
 
Описание
    The New-ScheduledTaskAction cmdlet creates an object that contains the definition of a scheduled task action. A scheduled task action represents a command that a task executes when Task Scheduler runs the task. You can use a task action definition to register a new scheduled task or update an existing task registration.
     
    A task can have a single action or a maximum of 32 actions. When you specify multiple actions, Task Scheduler executes the actions sequentially. The Task Scheduler service controls tasks activation, and it hosts the tasks that it starts.
 
Параметры
    -Argument <String>
        Specifies arguments for the command-line operation.

то бишь:
1. создает действие, а не действия
2. в качестве аргумента должна подаваться строка с одной командой, а не строка с массивом команд (хотя тут, скорее, всё зависит от запускаемой программы, т.е. вполне возможно, что в качестве аргумента можно подавать и набор команд).
 
Далее:

Цитата:
Register-ScheduledTask
Краткий обзор
    Registers a scheduled task definition on a local computer.
 
Описание
    The Register-ScheduledTask cmdlet registers a scheduled task definition on a local computer.
     
    You can register a task to run any of the following application or file types: Win32 applications, Win16 applications, OS/2 applications, MS-DOS applications, batch files (*.bat), command files (*.cmd), or any properly registered file type.
 
 
Параметры
    -Action <CimInstance[]>
        Specifies an array of one or more work items for the task to run. If you specify multiple actions, the computer runs them in order. You can specify up to 32 actions.

то бишь:
1. Регистрирует задачу в планировщике
2. В качестве действия в одной задаче может содержаться до 32 объектов с командами, причем их тип CimInstance (что создает, как раз, New-ScheduledTaskAction)
 
Выводы:
Нам надо либо создать пакетный batch-файл со списком команд и подавать его в качестве единственной команды (что, имхо, непрактично, ибо привлекать cmd из powershell - неспортивно), либо создать массив одиночных действий. Ну или доводить "до ума" ту задачу с запуском powershell.exe c автономной строкой со списком команд win32, т.е. приводить в соответствие все кавычки в сочетании с параметрами запускаемых приложений win32, так чтобы те кавычки при запуске были на месте и не съедались бы ни powershell.exe, ни командлетами при передаче тех параметров на запуск...
В общем, например, если переписать тот код в соответствии с документацией, без особых заморочек с кавычками, то получилось бы это:

Код:
$arr = @(  
    "-c ""&{regsvr32.exe /u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenuShim64.dll""}""",  
    "-c ""&{regsvr32.exe /u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu64.dll""}""",
    "-c ""&{regsvr32.exe /u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu.dll""}""",
    "-c ""&{start-sleep -seconds 10}"""
)
$action = for ($i=0;$i -lt $arr.length;$i++){
    New-ScheduledTaskAction -Execute powershell.exe -argument $arr[$i]
}
 
$trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 31 -At 9am  
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable  
$principal = New-ScheduledTaskPrincipal -UserID $env:USERNAME -RunLevel Highest  
$params = @{  
    TaskName    = "2C"  
    Action    = $action  
    Trigger    = $trigger  
    Settings    = $settings  
    Principal    = $principal  
}
Register-ScheduledTask @params -Force

Но, учитывая, что:

Цитата:
task to run any of the following application or file types: Win32 applications, Win16 applications, OS/2 applications, MS-DOS applications, batch files (*.bat), command files (*.cmd), or any properly registered file type.

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

Код:
$arr = @(  
    "/u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenuShim64.dll""",  
    "/u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu64.dll""",
    "/u /s ""${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu.dll"""
)
$action = for ($i=0;$i -lt $arr.length;$i++){
    New-ScheduledTaskAction -Execute regsvr32.exe -argument $arr[$i]
}
$action += New-ScheduledTaskAction -execute powershell.exe -argument "-command 'start-sleep -seconds 10'"
 
$trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 31 -At 9am  
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable  
$principal = New-ScheduledTaskPrincipal -UserID $env:USERNAME -RunLevel Highest  
$params = @{  
    TaskName    = "2C"  
    Action    = $action  
    Trigger    = $trigger  
    Settings    = $settings  
    Principal    = $principal  
}
Register-ScheduledTask @params -Force

 
как-то так...
Проверить не на чем, Acrobat DC у меня отсутствует...
 
Добавлено:
Что-то тут пришла мысля... а ведь, если мы подаем в командлет создания действия автономную строку, состоящую из нескольких строк, то при передаче в планировщик, вся эта строка вытянется в одну, т.е. блок команд у нас должен стать однострочником, поэтому команды необходимо разделять так, как если бы они были записаны в одну строку мысля оказалась неверной и по итогам последующего эксперимента, выход скрипта получился таким:

Код:
$action = New-ScheduledTaskAction -Execute powershell.exe -Argument @"
    -command "&{
        regsvr32.exe /u /s "${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenuShim64.dll"
        regsvr32.exe /u /s "${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu64.dll"
        regsvr32.exe /u /s "${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\ContextMenu.dll"
        start-sleep -seconds 10
    }"
"@
$trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 31 -At 9am
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable
$principal = New-ScheduledTaskPrincipal -UserID $env:USERNAME -RunLevel Highest
$params = @{
    TaskName    = "2C"
    Action        = $action
    Trigger        = $trigger
    Settings    = $settings
    Principal    = $principal
}
Register-ScheduledTask @params -Force

Попробуйте и этот вариант...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 17:10 19-08-2019 | Исправлено: YuS_2, 10:11 20-08-2019
Smitis



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

Цитата:
не получается потому в ответе миллисекунд нет.

Я про это и говорю.
 
YuS_2

Цитата:
то при передаче в планировщик, вся эта строка вытянется в одну

Там ещё символы конца строки в текст попадают. Можно сделать -replace "[`n`r]+ *","; " для добавления ";"
ХЗ, как эти символы влияют на выполнения.


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

Всего записей: 3214 | Зарегистр. 09-02-2003 | Отправлено: 01:49 20-08-2019 | Исправлено: Smitis, 02:01 20-08-2019
varbasik

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Спасибо!
 
Скрипт выводит активные подключения к RDS в таблицу.
Выделяем нужный сеанс и подключаемся кнопкой "Control".
Актуально для windows 2012 и выше.
 

Всего записей: 226 | Зарегистр. 02-07-2009 | Отправлено: 02:29 20-08-2019 | Исправлено: varbasik, 03:16 20-08-2019
farag



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

Цитата:
Попробуйте и этот вариант...

Не отрабатывается.

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

Отрабатывается

Всего записей: 2477 | Зарегистр. 27-07-2009 | Отправлено: 08:12 20-08-2019
YuS_2



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

Цитата:
Там ещё символы конца строки в текст попадают.

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

Код:
powershell -command {notepad.exe "d:\test.txt"}

которая замечательно работает и из консоли PS, и из скрипта .ps1, но она напрочь не работает из планировщика, если поместить её в таком именно виде.
 
Хорошо, предположим, что планировщику не нравятся фигурные скобки, поэтому попробуем их взять в кавычки и привести всю строку в соответствие с синтаксисом powershell:

Код:
powershell -command "&{notepad.exe ""d:\test.txt""}"

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

Код:
powershell -command "&{notepad.exe "d:\test.txt"}"

Спецов по powershell прошу не торопиться с выводами, хоть это и противоречит синтаксису PS, но вполне себе, работает из консоли PS и из скрипта, и из планировщика тоже, т.е. вариант рабочий.
 
Ок, пусть он и рабочий вариант, но т.к. противоречит описанию документации, то перепишем строку с одинарными кавычками внутри двойных:

Код:
powershell -command "&{notepad.exe 'd:\test.txt'}"

Этот вариант, тоже работает и из консоли PS, и из скрипта, и из планировщика. Значит и этот вариант рабочий.
 
Ок, чтобы не возникало когнитивных диссонансов, остановимся на последнем рабочем варианте.
Попробуем его усложнить и запустить добавление задачи из скрипта:

Код:
$action = New-ScheduledTaskAction -Execute powershell.exe -Argument @"
    -command "&{
        notepad 'D:\test.txt'
        notepad 'D:\test.txt'
        notepad 'D:\test.txt'
    }"
"@
$trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 31 -At 9am
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable
$principal = New-ScheduledTaskPrincipal -UserID $env:USERNAME -RunLevel Highest
$params = @{
    TaskName    = "2C"
    Action        = $action
    Trigger        = $trigger
    Settings    = $settings
    Principal    = $principal
}
Register-ScheduledTask @params -Force

- вот мы и получили запуск трех блокнотов, без semicolon-ов. Сразу скажу, что вариант с двойными не удвоенными кавычками внутри строки тоже проверил и он тоже работает...
Соответственно, такой вариант будет рабочим с другими командами-приложениями, если синтаксис каждой строки будет правильным относительно запускаемой программы.
 
Предыдущую свою простыню с предположениями, поправляю в соответствии с выводами данного эксперимента.
 
PS Надо ещё дополнить, что те же самые результаты можно получить не только из планировщика, но и если запускать протестированные строки непосредственно из консоли CMD. Т.е. все несостыковки по синтаксису кавычек powershell, привносит в запускаемую строку не сам планировщик и не powershell, а CMD со своим собственным синтаксисом кавычек... и соответственно, для проверки работоспособности строк (с присутствием powershell в качестве запускающего приложения) в добавляемых задачах планировщика, их можно запускать из консоли CMD.
 
Добавлено:
farag

Цитата:
Не отрабатывается.

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 09:56 20-08-2019 | Исправлено: YuS_2, 11:25 20-08-2019
Smitis



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

Цитата:
работает из консоли

Если это о cmd, то он вносит свои искажения. Лучше через Win-R, там запуск в "чистом" виде.
П.С.
Извиняюсь, не обратил внимание, что речь о консоли PS

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

Всего записей: 3214 | Зарегистр. 09-02-2003 | Отправлено: 11:48 20-08-2019 | Исправлено: Smitis, 12:10 20-08-2019
LevT



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

Код:

$command = {
    notepad 'D:\test.txt'
    notepad 'D:\test.txt'
    notepad 'D:\test.txt'
}
 
$action = New-ScheduledTaskAction -Execute powershell.exe -Argument "-Command & {$command}"
 
 
$trigger = New-ScheduledTaskTrigger -Daily -DaysInterval 31 -At 9am
$settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable
$principal = New-ScheduledTaskPrincipal -UserID $env:USERNAME -RunLevel Highest
$params = @{
    TaskName    = "2C"
    Action        = $action
    Trigger        = $trigger
    Settings    = $settings
    Principal    = $principal
}
Register-ScheduledTask @params -Force  

 
Хочется добавить в строку аргумента -WindowsStyle Hidden
но почему-то это у меня не работает
 
Добавлено:
 
Да, можно написать  
 
$command = @"
    notepad 'D:\test.txt'
    notepad 'D:\test.txt'
    notepad 'D:\test.txt'
"@
 
и т.о. заюзать в правой части присваивания string expansion вместо языкового средства powershell (создания ссылки-имени для скриптблока)
 
 
Добавлено:
 
Генерироватть внутренние команды можно как-то так

Код:

$dll = "ContextMenuShim64.dll,ContextMenu64.dll,ContextMenu.dll" -split ","
$dll | regsvr32.exe /u /s "${env:ProgramFiles(x86)}\Adobe\Acrobat DC\Acrobat Elements\$_"

 
Чтобы отложить исполнение, надо присвоить имя этому скриптблоку  
$command = {...}

Всего записей: 17149 | Зарегистр. 14-10-2001 | Отправлено: 12:40 20-08-2019 | Исправлено: LevT, 13:10 20-08-2019
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru