Запланированная задача для сценария Powershell

Таким образом, я пытаюсь запустить powershell скрипт в расписании. Каждое утро в 6:00 повторяйтесь каждый час дня. Вот сам сценарий:

Get-Content C:\Users\administrator\Desktop\users.txt | ForEach-Object {
    Set-AdUser -Identity $_ -LogOnWorkstations $null
}

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

2
задан 8 October 2015 в 15:28
4 ответа

Где запланированная задача? На GPO или на локальной машине? Скрипт и машина, на которой он должен работать, находятся в одной сети?

Попробуйте запланировать это следующим образом (если вы еще этого не сделали):

Programm/Script: PowerShell.exe

Arguments: -ExecutionPolicy Bypass -Command "& 'FilePathToScript.ps1'"

Изменить: Также я не совсем уверен, есть ли у вас установить AD-PS-Module на Рабочую станцию, на которой вы хотите запустить сценарий, поскольку может оказаться, что команда Set-ADUser не может быть найдена.

4
ответ дан 3 December 2019 в 09:34

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

Здесь вам не хватает информации. Вы не получите никакой информации с двумя командами и без регистрации. И вы не загружаете модуль Active Directory, поэтому это может объяснить несколько вещей.

Вот пример того, как запустить сценарий PowerShell в качестве запланированной задачи и записать вывод:

Program/Script: PowerShell  
Arguments:  
-NonInteractive -WindowStyle minimized -c "powershell -c C:\Apps\AppName\SomeScript.ps1 -verbose > C:\Apps\AppName\Logs\SomeScript.log 2>&1"  

Вот пример загрузки модуля Active Directory:

$startTime = Get-Date
$logDateFormat = "yyyy-MM-dd HH:mm:ss"
[console]::WriteLine("{0} Loading Active Directory Module", [datetime]::Now.ToString($logDateFormat))
import-module ActiveDirectory  

Get-Content C:\Users\administrator\Desktop\users.txt | ForEach-Object {  
    [console]::WriteLine("{0} Clearing workstations for user: {1}", [datetime]::Now.ToString($logDateFormat), $_)
    Set-AdUser -Identity $_ -LogOnWorkstations $null
}

$endTime = Get-Date
[console]::WriteLine("{0} Finished.  Time Required: {1}", [datetime]::Now.ToString($logDateFormat), $endTime.Subtract($startTime).ToString())
0
ответ дан 3 December 2019 в 09:34

Политику выполнения легко проверить, можете ли вы запустить ее как сценарий когда вы вошли в систему нормально? Если нет, то «установить политику выполнения удаленно», запуск из административного сеанса PowerShell установит ее глобально для сервера HTE.

Пользователь, выполняющий запланированную задачу, должен иметь права «Вход в систему как пакетный» для машины, которая работает. учитывая, что это модуль AD, я предполагаю, что вы запускаете его на контроллере домена, и в этом случае вам нужно будет изменить объект групповой политики контроллера домена по умолчанию, чтобы назначить право «Вход в систему как пакетный» для вашего пользователя. Если он работает на рабочей станции или рядовом сервере с RSAT, вам необходимо использовать локальную политику безопасности, чтобы назначить это право (SecPol.MSC).

Пользователь, запускающий сценарий, должен иметь доступ к Active Directory для уровень, на котором он может изменять объекты пользователя. Обычно, если вы входите в систему на контроллере домена, у вас будет администратор домена, который даст вам это право, но если вы создали учетную запись службы, она может не иметь необходимых разрешений. Вам нужно будет изучить требуемый уровень разрешений и применить его к соответствующим областям вашего домена AD. Осторожно с этим.

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

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

1
ответ дан 3 December 2019 в 09:34

Это будет что-то вроде этой программы / скрипта Powershell.exe Аргумент и путь

 -ExecutionPolicy Bypass -File "C:\alert.ps1"

enter image description here

0
ответ дан 3 December 2019 в 09:34

Теги

Похожие вопросы