如何解决从工作站注册计划的任务可以完美地工作
在测试期间,此脚本在我的工作站上非常有效。它从CSV获取用户名禁用日期时间并启用日期和时间,然后创建计划任务以在特定锁定时间内使帐户过期。然后,它将在启用过程中解锁帐户。此后,我已经在服务器Windows 2012 R2上安装了它,现在收到错误消息。
我已经运行了Update-Module -force,还尝试了PowerShell 7
# Set RUN AS user and Password
if($credentials -eq $null){
$credentials = Get-Credential
}
# Set Args
$scriptDefaultArgs = '-executionpolicy bypass'
$csvFilePath = "C:\SCHEDULED_TASKS\VacationUsers\vacation.csv"
# static Scheduled Task settings
$STSettings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable -StartWhenAvailable
$STSettings.DeleteExpiredTaskAfter = "PT0S"
$STPrinciple = New-ScheduledTaskPrincipal -logonType S4U -RunLevel Highest -UserId $credentials.UserName
# Import CSV
$accounts = Import-Csv $csvFilePath
foreach ($account in $accounts){
if($account.entered -eq "completed" -or !$account ){continue}
if((get-date $account.disableDate) -lt (get-date)){$account.disableDate = (get-date).AddMinutes(1).ToString("MM/dd/yyyy HH:mm:ss")}
if((get-date $account.EnableDate) -lt (get-date)){$account.EnableDate = (get-date).AddMinutes(2).ToString("MM/dd/yyyy HH:mm:ss")}
# Created Scheduled Task #
# Enable User Task
$STactionEnableuser = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "$scriptDefaultArgs -command `"clear-adaccountexpiration -identity $($account.user)`""
$STEnableTrigger = New-ScheduledTaskTrigger -Once -At $account.enableDate
$STEnableTrigger.EndBoundary = (get-date $account.EnableDate).AddMinutes(1).ToString("yyyy-MM-dd'T'HH:mm:ss")
$STDef = New-ScheduledTask -Action $STactionEnableuser -Trigger $STEnabletrigger -Settings $STSettings -Description "enable $($account.user)"
$task = Register-ScheduledTask -TaskName "Enable $($account.user)" -InputObject $STDef -User $credentials.UserName -Password $credentials.GetNetworkCredential().Password
$STactiondisableuser = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "$scriptDefaultArgs -command set-adaccountexpiration -identity $($account.user) -datetime $($account.disableDate)`""
$STdisableTrigger = New-ScheduledTaskTrigger -Once -At $account.disableDate
$STdisableTrigger.EndBoundary = (get-date $account.disableDate).AddMinutes(1).ToString("yyyy-MM-dd'T'HH:mm:ss")
$STDef = New-ScheduledTask -Action $STactiondisableuser -Trigger $STdisabletrigger -Settings $STSettings -Description "disable $($account.user)"
$task = Register-ScheduledTask -TaskName "disable $($account.user)" -InputObject $STDef -User $credentials.UserName -Password $credentials.GetNetworkCredential().Password
$account.entered = "Completed"
}
$accounts | Export-Csv -Path $csvFilePath -Force -NoTypeinformation
The property 'EndBoundary' cannot be found on this object. Verify that the property exists and can be set.
At line:33 char:5
+ $STEnableTrigger.EndBoundary = (get-date $account.EnableDate).Add ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [],RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
Register-ScheduledTask : The task XML is missing a required element or attribute.
(43,4):EndBoundary:
At line:35 char:13
+ $task = Register-ScheduledTask -TaskName "Enable $($account.user) ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (PS_ScheduledTask:Root/Microsoft/...S_ScheduledTask) [Register
-ScheduledTask],CimException
+ FullyQualifiedErrorId : HRESULT 0x80041319,Register-ScheduledTask
The property 'EndBoundary' cannot be found on this object. Verify that the property exists and can be set.
At line:40 char:5
+ $STdisableTrigger.EndBoundary = (get-date $account.disableDate).A ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [],4):EndBoundary:
At line:42 char:13
+ $task = Register-ScheduledTask -TaskName "disable $($account.user ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (PS_ScheduledTask:Root/Microsoft/...S_ScheduledTask) [Register
-ScheduledTask],Register-ScheduledTask
解决方法
我个人从未真正喜欢过PowerShell cmdlet用于计划任务的操作,而是更喜欢使用ComObject作为计划程序。其中的一些方法较难理解,但是查看方法重载并使用Get-Member
cmdlet查找对象类型,然后在Internet上搜索这些类型以查找文档,通常会解决我在处理时遇到的问题。东西。这是您正在做的事的示例:
$Scheduler = New-Object -ComObject Schedule.Service
$Scheduler.Connect()
$RootFolder = $Scheduler.GetFolder("\")
#Define Enable User Task (general settings,user specific settings happen in loop)
$Task = $Scheduler.NewTask(0)
$Task.RegistrationInfo.Author = [Security.Principal.WindowsIdentity]::GetCurrent().Name
$Task.Settings.Enabled = $true
$Task.Settings.Hidden = $false
$Task.Settings.RunOnlyIfNetworkAvailable = $true
$Task.Settings.StartWhenAvailable = $true
$Task.Settings.DeleteExpiredTaskAfter = 'PT0S'
$Task.Principal.RunLevel = 1
$Action = $Task.Actions.Create(0)
$Action.Path = 'powershell.exe'
$Trigger = $Task.Triggers.Create(1)
foreach ($account in $accounts){
if($account.entered -eq "completed" -or !$account ){continue}
if((get-date $account.DisableDate) -lt (get-date)){$account.DisableDate = (get-date).AddMinutes(1).ToString("MM/dd/yyyy HH:mm:ss")}
if((get-date $account.EnableDate) -lt (get-date)){$account.EnableDate = (get-date).AddMinutes(2).ToString("MM/dd/yyyy HH:mm:ss")}
# Created Scheduled Task #
# Enable User Task
$Task.RegistrationInfo.Description = "enable $($account.user)"
$Action.Arguments = "$scriptDefaultArgs -command `"clear-adaccountexpiration -identity $($account.user)`""
$Trigger.StartBoundary = $account.enableDate
$Trigger.EndBoundary = (get-date $account.EnableDate).AddMinutes(1).ToString("yyyy-MM-dd'T'HH:mm:ss")
$RootFolder.RegisterTaskDefinition("Enable $($account.user)",$Task,6,$credentials.UserName,$credentials.GetNetworkCredential().Password,1)
$Task.RegistrationInfo.Description = "Disable $($account.user)"
$Action.Arguments = "$scriptDefaultArgs -command set-adaccountexpiration -identity $($account.user) -datetime $($account.disableDate)`""
$Trigger.StartBoundary = $account.disableDate
$Trigger.EndBoundary = (get-date $account.DisableDate).AddMinutes(1).ToString("yyyy-MM-dd'T'HH:mm:ss")
$RootFolder.RegisterTaskDefinition("Disable $($account.user)",1)
$account.entered = "Completed"
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。