You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PowerShell创建的Exchange Online计划任务用双引号无法正常运行?

PowerShell计划任务双引号执行异常的问题解决

你的问题核心是双引号Here-String的变量插值特性导致生成的计划任务脚本不符合预期,进而使任务一直处于Running状态无法完成。单引号Here-String不会自动解析变量,脚本会原样传递给计划任务执行,因此正常;而双引号Here-String会在当前脚本执行时就把变量替换成实际值,若变量值包含特殊字符、空格,或者替换后脚本语法出错,就会导致计划任务执行卡住。

具体修复方案:

  1. 转义Here-String中的变量:在双引号Here-String里,所有需要留到计划任务执行时才解析的变量,前面加反引号`,避免当前脚本提前插值。
  2. 修正参数引号转义:移除不必要的双引号转义,改用单引号包裹参数值,或用反引号转义双引号。
  3. 日志字符串的引号处理:日志行的双引号用反引号转义,避免语法错误。

修正后的$Command代码:

$Command =
@"
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12
`$UserName = 'user@site.com'
`$PasswordText = Get-Content C:\\Users\\User\\Password\\Secure.txt
`$SecurePwd = `$PasswordText | ConvertTo-SecureString
`$CredObject = New-Object System.Management.Automation.PSCredential -ArgumentList `$UserName, `$SecurePwd
connect-exchangeonline -Credential `$credObject 
Remove-MailboxFolderPermission -Identity `$To_From_Email -User `$Add_Remove_Email -Confirm:`$false -ErrorAction Ignore
Add-MailboxFolderPermission -Identity `$To_From_Email -User `$Add_Remove_Email -AccessRights '$Select_Permission'
"`$TriggerDate,`$WhoAmI,`$TaskName,Grant Permissions,`$Add_Remove_Email_Ref,`$To_From_Email_Ref,`$TriggerDate,`$EndTriggerDate,`$Select_Permission,No, No"|Add-Content -Path C:\\Users\\User\\Logs\\Calendar-Scheduled-Tasks-Log.csv
"@

额外注意点:

  • 计划任务的EndAction参数中,Unregister-ScheduledTask的命令需要用引号包裹参数,避免$TaskName包含空格时出错:
$EndAction = New-ScheduledTaskAction -Execute "Powershell.exe" -Argument "-WindowStyle Hidden Unregister-ScheduledTask -Taskname `"$TaskName`" -Confirm:`$false;Unregister-ScheduledTask -TaskName `"$TaskName-Remove`" -Confirm:`$false"
  • 生成Base64编码前,确保$Command的语法完全正确,可以先将$Command输出到控制台检查,确认变量都被正确转义,没有提前替换。

内容的提问来源于stack exchange,提问作者Dust Ellse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:45:43