PowerShell创建计划任务时-Argument参数内变量无法解析如何解决
解决方案
根因
PowerShell 中单引号包裹的字符串默认不会做变量展开,只有外层用双引号包裹时,内部的$开头变量才会被自动解析为实际值。你当前代码中-Argument的参数外层用了单引号,所以$FolderName直接作为字符串传递了。
修复方法
两种常用写法都可以解决问题,优先推荐第二种可读性更高:
写法1:双引号嵌套转义
用反引号(PowerShell 官方转义字符)转义参数内部的双引号,外层用双引号包裹整个参数字符串:
# 仅需要修改$Action定义行即可 $Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-File `"C:\Users\Paul\Documents\RSYNC\Get-LatestAppLog.ps1`" -name `"$FolderName`""
写法2:字符串格式化(推荐)
用-f格式化运算符拼接参数,避免多层引号嵌套的混乱,对带空格的文件夹名兼容性更好:
# 先拼接好参数字符串再传入 $taskArgument = '-File "C:\Users\Paul\Documents\RSYNC\Get-LatestAppLog.ps1" -name "{0}"' -f $FolderName $Action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument $taskArgument
验证方式
创建任务后打开Windows任务计划程序,找到对应任务的「属性」-「操作」选项卡,查看详情里的参数值,确认$FolderName已经被替换为实际的文件夹名称即可。
内容的提问来源于stack exchange,提问作者Paul van Schalkwyk
相关产品推荐
相关产品推荐

