gpt4 book ai didi

powershell - 计划工作中的新职业

转载 作者:行者123 更新时间:2023-12-03 00:10:33 26 4
gpt4 key购买 nike

我想编写一个脚本,该脚本为Exchange服务器上的某些用户启用邮件转发,并在指定的时间将其关闭。

但是当$script_bloc在作业中执行时:New-PSSession返回null,没有任何错误。

我可以传递给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

最佳答案

在PowerShell中注册作业时,该作业在Microsoft \ Windows \ PowerShell文件夹下的Task Scheduler中作为Task创建。因此,如果未明确提及凭据,则在任务内需要身份验证的任何操作都将失败,并显示访问被拒绝错误。

您可以通过在ScriptBlock中添加Try{} Catch{}来对其进行测试。

您可以通过将-Credential cmdlet使用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 cmdlet一起使用,将带和不带 Register-ScheduleJob参数。您可以看到区别。

关于powershell - 计划工作中的新职业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49915240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com