Таким образом, я пытаюсь запустить powershell скрипт в расписании. Каждое утро в 6:00 повторяйтесь каждый час дня. Вот сам сценарий:
Get-Content C:\Users\administrator\Desktop\users.txt | ForEach-Object {
Set-AdUser -Identity $_ -LogOnWorkstations $null
}
Теперь, сценарий работает безупречно, когда я выполняю его сам. Но кажется, как будто сценарий не будет правильно работать когда то, что это было запланированным выполниться. Мои мысли - то, что политика выполнения продолжает просить если ее сейф запускать скрипт до выполнения его. Если кто-либо еще соглашается, что это могло бы быть причиной, которую сценарий не может запустить самостоятельно, Вы могли предоставить мне решение вокруг этого барьера?
Где запланированная задача? На GPO или на локальной машине? Скрипт и машина, на которой он должен работать, находятся в одной сети?
Попробуйте запланировать это следующим образом (если вы еще этого не сделали):
Programm/Script: PowerShell.exe
Arguments: -ExecutionPolicy Bypass -Command "& 'FilePathToScript.ps1'"
Изменить: Также я не совсем уверен, есть ли у вас установить AD-PS-Module на Рабочую станцию, на которой вы хотите запустить сценарий, поскольку может оказаться, что команда Set-ADUser
не может быть найдена.
Политика выполнения распространяется на всю машину. Если он работает в интерактивном режиме, маловероятно, что это будет проблемой при запуске как запланированного задания.
Здесь вам не хватает информации. Вы не получите никакой информации с двумя командами и без регистрации. И вы не загружаете модуль 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())
Политику выполнения легко проверить, можете ли вы запустить ее как сценарий когда вы вошли в систему нормально? Если нет, то «установить политику выполнения удаленно», запуск из административного сеанса PowerShell установит ее глобально для сервера HTE.
Пользователь, выполняющий запланированную задачу, должен иметь права «Вход в систему как пакетный» для машины, которая работает. учитывая, что это модуль AD, я предполагаю, что вы запускаете его на контроллере домена, и в этом случае вам нужно будет изменить объект групповой политики контроллера домена по умолчанию, чтобы назначить право «Вход в систему как пакетный» для вашего пользователя. Если он работает на рабочей станции или рядовом сервере с RSAT, вам необходимо использовать локальную политику безопасности, чтобы назначить это право (SecPol.MSC).
Пользователь, запускающий сценарий, должен иметь доступ к Active Directory для уровень, на котором он может изменять объекты пользователя. Обычно, если вы входите в систему на контроллере домена, у вас будет администратор домена, который даст вам это право, но если вы создали учетную запись службы, она может не иметь необходимых разрешений. Вам нужно будет изучить требуемый уровень разрешений и применить его к соответствующим областям вашего домена AD. Осторожно с этим.
Я готов поспорить, что это был правильный вход в систему как пакетный, он поймал меня несколько раз и не был очевиден, когда он остановил вас.
Если вам нужно изучить дополнительную вкладку истории запланированных задач может помочь, как и программа просмотра событий.
Это будет что-то вроде этой программы / скрипта Powershell.exe
Аргумент и путь
-ExecutionPolicy Bypass -File "C:\alert.ps1"