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 Командлет. Вы можете увидеть разницу.

Другие вопросы по тегам