Как задать параметр starttime powershell

от admin

Запуск PowerShell скриптов по расписанию

В задачи практически любого системного администратора входит написание различных скриптов и их запуск. Запланировать запуск скрипта по расписанию с помощью Task Sheduler — задача несложная, но при использовании PowerShell есть некоторые нюансы, о которых я расскажу в этой статье.

Итак, предположим, у меня есть скрипт start.ps1, который мне необходимо запускать ежедневно в течении 10 дней. Есть два способа решить эту задачу.

Способ 1

Для запуска скрипта воспользуемся оснасткой Task Scheduler, он же планировщик заданий. Найти его можно в разделе Administrative Tools, либо нажав Win+R и введя команду taskschd.msc. Открываем планировщик и в разделе Actions выбираем пункт Create Task.

На вкладке General указываем имя и описание задания, а также (по необходимости) пользователя, от имени которого задание будет запускаться. Для того, чтобы задание выполнялось вне зависимости от того, залогинен ли пользователь в системе, выбираем опцию «Run whether user is logged on or not». Если для выполнения задания требуется повышение привилегий, то отмечаем опцию «Run with highest privileges».

новое задание, вкладка General

Далее идем на вкладку Triggers и создаем новый триггер, в котором будет храниться расписание запуска нашего задания. В поле Start указываем дату и время запуска, а в поле Expire — дату и время завершения задания. Указываем выполнять задание ежедневно (Daily) и задаем период повтора (Recur every) 1 день.

Примечание. Если вы хотите запускать задание чаще, чем раз в день, то надо выбрать одноразовое выполнение (One time), а в разделе Advanced settings отметить пункт Repeat task every и указать время повторения, минимум 5 минут, максимум 1 час. Если этого недостаточно, то дополнительно в поле Delay task for up to можно указать временную задержку.

задаем условие для запуска задания

И основное. Переходим на вкладку Action и указываем действие для запланированного задания. Напомню, что в целях безопасности PowerShell скрипты могут выполняться только интерактивно, то есть сначала надо запустить оболочку PowerShell и уже в ней указать путь к скрипту. Поэтому в поле «Action» указываем запуск powershell.exe, а в поле «Add Arguments» параметр -File и путь к нашему скрипту, вот так:

Также в поле аргументы можно указать:

-Command — выполняет указанные команды и любые другие параметры. Этот параметр тоже можно использовать для запуска скрипта, например: -Command ″& ″ . Кроме того, с его помощью можно передавать в скрипт параметры: -Command ″& ″ ;
-ExecutionPolicy — задает политику выполнения скриптов для текущего сеанса, может принимать значения Unrestricted, RemoteSigned, AllSigned и Restricted. Заданная политика будет действовать только в текущем сеансе и имеет приоритет над любыми ранее созданными политиками;
-NonInteractive — отключить вывод интерактивных запросов к пользователю;
-WindowStyle Hidden — запуск окна PowerShell в скрытом режиме, незаметно для пользователя;
-NoProfile — предотвращает загрузку профиля, что может несколько ускорить выполнение скрипта;
-NoExit — оставить оболочку открытой после отработки скрипта. Это может понадобиться при проверке и отладке скрипта.

указываем действие для запланированного задания

Заполнив необходимые поля жмем ОК и сохраняем задание. Теперь скрипт будет запускаться по расписанию ежедневно в заданное время в течении 10 дней.

Способ 2

В PowerShell 3.0 появился новый функционал Sheduled Job, дающий возможность создавать запланированные задания прямо из консоли, не пользуясь оснасткой планировщика. Воспользуемся им для планового запуска нашего скрипта.

Сначала создаем расписание запуска (ежедневно в полпятого вечера, в течении 10 дней):

$t = New-JobTrigger -Daily -At 4:30PM -DaysInterval 10

Затем сохраняем в переменной учетные данные:

$cred = Get-Credential contoso\administrator

В качестве опции указываем запуск задания с повышенными привилегиями:

$o = New-ScheduledJobOption -RunElevated

И регистрируем задание с именем Start:

Register-ScheduledJob -Name Start -FilePath C:\Scripts\start.ps1 -Trigger $t -Credential $cred -ScheduledJobOption $o

создание запланированного задания в PowerShell

Чтобы убедится в том, что задание создано, можно открыть планировщик и найти наше задание в разделе Microsoft\Windows\PowerShell\SheduledJobs.

запланированное задание в Task Sheduler

Примечание. Для каждого запланированного задания PowerShell в директории %systemdrive%\Users\%username%\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs создается одноименная папка. В этой папке находится само задание в XML-файле и папка Output, в которой, в подпапках по времени выполнения, хранится история выполнения задания — результат выполнения (файлs Result.xml) и статус задания (Status.xml). Эти файлы могут пригодиться для отладки и диагностики в том случае, если задание не отрабатывает должным образом.

Execution Policy

В заключение напомню об одном немаловажном моменте, а именно о политике выполнения скриптов Execution Policy. Посмотреть текущее значение политики можно командой Get-ExecutionPolicy . Политика выполнения может иметь значения:

• Restricted — блокируется выполнение любых скриптов. Значение по умолчанию;
• AllSigned — разрешено выполнение скриптов, имеющих цифровую подпись;
• RemoteSigned — скрипты, подготовленные на локальном компьютере, можно запускать без ограничений, скрипты, загруженные из Интернета — только при наличии цифровой подписи;
• Unrestricted — разрешено выполнение любых скриптов. При запуске неподписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение;
• Bypass — ничего не блокируется, никакие предупреждения и запросы не появляются.

Обычно для безпроблемного выполнения скриптов достаточно задать значение RemoteSigned. Изменить текущее значение можно командой Set-ExecutionPolicy , например:

Set-ExecutionPolicy RemoteSigned -force

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

How to calculate the StartTime / UntilTime parameter using Get-Printer in Powershell?

Now im kinda depressed i cant figure out how the hell 18:40 is represented as the value 1000 and 3:00 as the value 60.

I tried to find the answer via google but the technical references are only giving me information like

-StartTime UInt32 — Specifies the starting time of printer availability.

So my question is how do i calculate the value represented by the parameter StartTime and UntilTime? If needed i can add more values. Just cant figure it out.

4 Answers 4

I believe both values are calculated in minutes since 12:00 AM GMT. That would put you in GMT+2. Does that work out properly?

Just to clarify on this — there are multiple tricks on this question:

1) Johnathan is right — it is a trick question. The trick, though, comes from the fact that a user can submit a job at ANY time to the printer, regardless of the availability of the printer. The job will just hold in queue until StartTime is reached — at which time, it will print.

2) As mentioned before, the printer is paused. Nothing prints, although users can send jobs at any time.

3) StartTime and UntilTime are computed using UTC, regardless of the time zone and they are in minutes. So, if you set your StartTime to 0100 UTC, it will show as «60». This trick uses «1000» to fool you into thinking it is «10 o’clock». It is actually 4:40pm UTC. «60» is going to be 1:00am UTC. «600» is going to be 10:00am UTC.

4) Since the question does not indicate the Time Zone, the times aren’t going to matter, because the clock times given in the question aren’t going to be the same, say, for me in UTC-7, for someone in UTC+2. So. ANOTHER trick.

PowerShell: системное администрирование и программирование

Всё о PowerShell в Windows и на Linux. Системное администрирование Windows

Тонкая настройка вывода с Format-Table

Командлет Format-Table для вывода данных в виде таблицы

Командлет Format-Table форматирует выходные данные команды в виде таблицы с выбранными свойствами объекта в каждом столбце. Тип объекта определяет макет по умолчанию и свойства, которые отображаются в каждом столбце. Вы можете использовать параметр -Property, чтобы выбрать свойства, которые вы хотите отобразить.

По умолчанию многие командлеты выводят данные оформленные в виде таблицы. В этом случае перенаправление вывода в Format-Table ничего не меняет.

Читать:
Как отключить дополнительные кнопки на мышке

Например, этот командлет выведет содержимое текущей папки:

И следующие набор команд также выведет содержимое текущей папки, при этом данные будут идентичными, в том числе по оформлению:

Но Format-Table не является бесполезным командлетом, поскольку с помощью его опций можно:

1. Изменять набор выводимых данных

2. Изменять внешний вид выводимых данных

Подробности смотрите в статьях:

  • Как в PowerShell менять набор выводимых по умолчанию данных
  • В PowerShell таблица не помещается на экран — как исправить (РЕШЕНО)

Опции Format-Table

-AutoSize

Указывает, что командлет регулирует размер столбца и количество столбцов в зависимости от ширины данных. По умолчанию размер и количество столбцов определяются используемым шаблоном (так называемый «вид», view). Таблица, выведенная с использованием параметра -AutoSize может быть более компактной за счёт уменьшения пространства между столбцами.

-DisplayError False|True

Указывает, что командлет отображает ошибки в командной строке. Этот параметр можно использовать в качестве вспомогательного средства отладки, когда вы форматируете выражения в команде Format-Table и вам необходимо устранить неполадки с выражениями.

-Force

Указывает, что командлет предписывает командлету отображать всю информацию об ошибках. Используйте с параметром -DisplayError или -ShowError. По умолчанию, когда объект ошибки записывается в потоки ошибок или отображения, отображается только некоторая информация об ошибках.

Задаёт отсортированный вывод в отдельных таблицах на основе значения свойства. Например, вы можете использовать -GroupBy для перечисления служб в отдельных таблицах в зависимости от их статуса.

Введите выражение или свойство. Параметр -GroupBy предполагает, что объекты отсортированы. Используйте командлет Sort-Object перед использованием Format-Table для группировки объектов.

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

  • Name (или Label) — `<строка>`
  • Expression — `<строка>` или `<блок скрипта>`
  • FormatString — `<строка>`

-HideTableHeaders

Пропускает заголовки столбцов из таблицы.

-InputObject

Указывает объекты для форматирования. Введите переменную, содержащую объекты, или введите команду или выражение для получения объектов.

Чтобы понять принцип работы этого параметра, посмотрите на следующую команду:

и на идентичную предыдущей эту команду:

-Property <Object[]>

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

Если вы опустите этот параметр, свойства, отображаемые на дисплее, будут зависеть от свойств первого объекта. Например, если у первого объекта есть PropertyA и PropertyB, а у последующих объектов есть PropertyA , PropertyB и PropertyC , то будут отображаться только заголовки PropertyA и PropertyB.

Параметр -Property является необязательным. Вы не можете использовать параметры -Property и -View в одной и той же команде.

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

  • Name (или Label) = `<строка>`
  • Expression = `<строка>` или `<скриптовый блок>`
  • FormatString = `<строка>`
  • Width = `<int32>`
  • Alignment = значением может быть Left, Center или Right

-RepeatHeader

Повторяет отображение заголовка таблицы после каждого заполнения экрана. Повторяющийся заголовок полезен, когда вывод направляется на программу, разделяющую вывод на страницы, такие как «less» или «more», или пейджинг с помощью программы чтения с экрана.

-ShowError

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

Отображает текст, превышающий ширину столбца, на следующей строке. По умолчанию текст, превышающий ширину столбца, обрезается.

Примеры использования Format-Table

Пример 1: Подстройка размера таблицы под выводимые данные.

В этом примере в виде таблицы отображаются сведения о хост программе для PowerShell.

Get-Host | Format-Table -AutoSize

Командлет Get-Host получает объекты System.Management.Automation.Internal.Host.InternalHost, представляющие хост. Объекты передаются по конвейеру в Format-Table и отображаются в таблице. Параметр -AutoSize регулирует ширину столбцов, чтобы свести к минимуму усечение.

Пример 2: Форматирование процессов по BasePriority

В этом примере процессы отображаются в группах с одинаковым свойством BasePriority.

Командлет Get-Process получает объекты, представляющие каждый процесс на компьютере, и отправляет их по конвейеру в Sort-Object. Объекты сортируются в порядке их свойства BasePriority.

Отсортированные объекты отправляются по конвейеру в Format-Table. Параметр -GroupBy упорядочивает данные процесса в группы на основе значения их свойства BasePriority. Параметр -Wrap гарантирует, что данные не будут усечены.

Пример 3: Форматирование процессов по дате запуска

В этом примере отображается информация о процессах, запущенных на компьютере. Объекты сортируются, и Format-Table использует представление для группировки объектов по дате их запуска.

Командлет Get-Process получает объекты System.Diagnostics.Process, представляющие процессы, запущенные на компьютере. Объекты отправляются по конвейеру в Sort-Object и сортируются на основе свойства StartTime.

Отсортированные объекты отправляются по конвейеру в Format-Table. Параметр -View указывает представление StartTime, определённое в файле PowerShell DotNetTypes.format.ps1xml для объектов System.Diagnostics.Process. Представление StartTime преобразует время начала каждого процесса в короткую дату, а затем группирует процессы по дате начала.

Файл DotNetTypes.format.ps1xml содержит представление Priority для процессов. Вы можете создавать свои собственные файлы format.ps1xml с настроенными представлениями.

Пример 4: Использование свойств для вывода таблицы

В этом примере параметр -Property используется для отображения всех служб компьютера в таблице с двумя столбцами, в которой показаны свойства Name и DependentServices.

Get-Service получает все службы на компьютере и отправляет объекты System.ServiceProcess.ServiceController по конвейеру. Format-Table использует параметр -Property, чтобы указать, что в таблице нужно отображать только свойства Name и DependentServices.

Name и DependentServices — это два свойства типа объекта. Чтобы просмотреть все свойства, выполните команду:

Пример 5: Форматирование вывода о процессе и расчёт времени его выполнения

В этом примере отображается таблица с именем процесса и общим временем выполнения для запущенных процессов программы Блокнот на локальном компьютере. Общее время выполнения рассчитывается путём вычитания времени запуска каждого процесса из текущего времени.

Командлет Get-Process получает все процессы блокнота локального компьютера и отправляет объекты по конвейеру. Format-Table отображает таблицу с двумя столбцами: «ProcessName» (свойство Get-Process), и «Время работы» (вычисляемое свойство).

Свойство «Время работы» задаётся хэш-таблицей с двумя ключами: Label и Expression. Ключ Label задаёт имя свойства. Expression задаёт вычисление. Выражение получает свойство StartTime каждого объекта процесса и вычитает его из результата команды Get-Date, которая получает текущую дату и время.

При желании, заголовок первого столбца также можно русифицировать:

Пример 6: Форматирование вывода информации о процессе

В этом примере командлет Get-CimInstance используется для получения времени выполнения всех процессов блокнота на локальном компьютере. Командлет Get-CimInstance можно использовать с параметром -ComputerName для получения информации с удалённых компьютеров.

Get-CimInstance получает экземпляры класса WMI Win32_Process, который описывает все процессы локального компьютера с именем notepad.exe. Объекты процесса хранятся в переменной $Processes.

Объекты процесса в переменной $Processes отправляются по конвейеру в Format-Table, которая отображает свойство ProcessName и новое вычисляемое свойство Total Running Time.

Команда присваивает имя нового вычисляемого свойства Total Running Time ключу Label. Блок сценария ключа Expression вычисляет, как долго выполняется процесс, вычитая дату создания процесса из текущей даты. Командлет Get-Date получает текущую дату. Дата создания вычитается из текущей даты. Результатом является значение Total Running Time.

Пример 6: Устранение ошибок формата

В следующих примерах показаны результаты добавления к выражению параметров -DisplayError или -ShowError.

Adding time started and time stopped to my script

I have a simple script that copies all files and folders from Server A to Server B. I would like to know how long the entire script took to run.

Any idea how I can figure out how long it took to copy all?

This seeemed to work great!

I used while troubleshooting Exchange Online throttling. Useful. Just don't forget to close it when you are done.

Похожие статьи