new-pssession в запланированной работе
Я хочу написать скрипт, который позволяет пересылать почту для какого-то пользователя на сервере Exchange и выключать его в указанное время.
Но когда $script_bloc
выполняет в работе: New-PSSession
возвращает ноль без каких-либо ошибок.
Я могу перейти к New-PSSession
жестко закодированные учетные данные, и в этом случае все работает так, как я ожидаю, но я не хочу этого делать, потому что срок действия моих паролей может истечь в момент начала работы.
Любая идея, почему New-PSSession
не работает на работе? И как заставить это работать?
$user = 'username1'
$fwdto = 'username2'
$remove_date = '19.04.2018 08:33:00'
Set-Mailbox -Identity $user -DeliverToMailboxAndForward $true -ForwardingAddress $fwdto
$job_date=[datetime]::Parse($remove_date)
$job_date=[datetime]::Now.AddSeconds(20) #for test
$trigger = New-JobTrigger -Once -At $job_date
$job_name="rfw_" + $user
$script_block = {
param($user_param,$job_name_param)
Start-Transcript $env:USERPROFILE\jobs\$job_name_param.log -Verbose -Append
$PSOptions = New-PSSessionOption –SkipCACheck –SkipRevocationCheck -SkipCNCheck
$sess = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exchange.company.org/PowerShell/ –SessionOption $PSOptions
Import-PSSession $sess | Out-Default
Set-Mailbox -Identity $user_param -DeliverToMailboxAndForward $false -ForwardingAddress $null | Out-Default
Remove-PSSession $sess | Out-Default
Unregister-ScheduledJob $job_name_param -Force
Stop-Transcript
}
Register-ScheduledJob -Trigger $trigger -Name $job_name -ScriptBlock $script_block -ArgumentList $user, $job_name
1 ответ
Когда вы регистрируете задание в PowerShell, оно создается как планировщик заданий в папке Microsoft\Windows\PowerShell. Таким образом, любые действия, требующие проверки подлинности внутри задачи, завершатся с ошибкой отказа в доступе, если учетные данные не указаны явно.
Вы можете проверить это, имея Try{} Catch{}
в вашем ScriptBlock.
Вы можете достичь своей цели, используя -Credential
параметр для Register-ScheduledJob
Командлет. Затем задача будет использовать эти учетные данные для любой операции,
$script_block = {
param($user_param,$job_name_param)
Try{
Start-Transcript $env:USERPROFILE\jobs\$job_name_param.log -Verbose -Append
$PSOptions = New-PSSessionOption –SkipCACheck –SkipRevocationCheck -SkipCNCheck
$sess = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exchange.company.org/PowerShell/ –SessionOption $PSOptions -ErrorAction Stop
$sess > C:\Session.log
Import-PSSession $sess | Out-Default
Set-Mailbox -Identity $user_param -DeliverToMailboxAndForward $false -ForwardingAddress $null | Out-Default
Remove-PSSession $sess | Out-Default
Unregister-ScheduledJob $job_name_param -Force
Stop-Transcript
}
Catch{
$_ > c:\Error.log
}
}
Используйте выше ScriptBlock с и без -Credetial
параметр для Register-ScheduleJob
Командлет. Вы можете увидеть разницу.