微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从工作站注册计划的任务可以完美地工作

如何解决从工作站注册计划的任务可以完美地工作

在测试期间,此脚本在我的工作站上非常有效。它从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 举报,一经查实,本站将立刻删除。