Powershell 注册计划任务在工作站上完全有效
在测试期间,这个脚本在我的工作站上运行得非常好。它从CSV中获取用户名disable date time和enable date and time,然后创建一个计划任务,使帐户在特定锁定时间内过期。然后,它将在启用过程中解锁帐户。我已经在服务器上安装了Windows 2012 R2,现在收到一个错误 我已经运行了更新模块-force,还尝试了PowerShell 7Powershell 注册计划任务在工作站上完全有效,powershell,powershell-5.0,Powershell,Powershell 5.0,在测试期间,这个脚本在我的工作站上运行得非常好。它从CSV中获取用户名disable date time和enable date and time,然后创建一个计划任务,使帐户在特定锁定时间内过期。然后,它将在启用过程中解锁帐户。我已经在服务器上安装了Windows 2012 R2,现在收到一个错误 我已经运行了更新模块-force,还尝试了PowerShell 7 # Set RUN AS user and Password if($credentials -eq $null){ $c
# 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
错误
在此对象上找不到属性“EndBoundary”。验证该属性是否存在并可以设置。
第33行字符:5
+$STEnableTrigger.EndBoundary=(获取日期$account.EnableDate)。添加。。。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:InvalidOperation:(:)[],运行时异常
+FullyQualifiedErrorId:PropertyAsignmentException
Register ScheduledTask:任务XML缺少必需的元素或属性。
(43,4):端边界:
第35行字符:13
+$task=注册ScheduledTask-TaskName“启用$($account.user)。。。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:NotSpecified:(PS_ScheduledTask:Root/Microsoft/…S_ScheduledTask)[注册
-ScheduledTask]异常
+FullyQualifiedErrorId:HRESULT 0x80041319,注册ScheduledTask
在此对象上找不到属性“EndBoundary”。请验证该属性是否存在并可以设置。
第40行字符:5
+$STDisableTrigger.EndBoundary=(获取日期$account.DisableDate)。A。。。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:InvalidOperation:(:)[],运行时异常
+FullyQualifiedErrorId:PropertyAsignmentException
Register ScheduledTask:任务XML缺少必需的元素或属性。
(43,4):端边界:
第42行字符:13
+$task=注册ScheduledTask-TaskName“禁用$($account.user。。。
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+CategoryInfo:NotSpecified:(PS_ScheduledTask:Root/Microsoft/…S_ScheduledTask)[注册
-ScheduledTask]异常
+FullyQualifiedErrorId:HRESULT 0x80041319,注册ScheduledTask
就我个人而言,我从来没有真正喜欢PowerShell cmdlet用于调度任务操作,更喜欢将ComObject用于调度程序。其中一些方法有点难以理解,但查看方法重载并使用Get Member
cmdlet查找对象类型,然后在internet上搜索这些类型以查找docume在我处理事情的过程中,Nitation通常会处理出现的问题。下面是一个你正在做的示例:
$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)",$Task,6,$credentials.UserName,$credentials.GetNetworkCredential().Password,1)
$account.entered = "Completed"
}