不可否认问题...我正在尝试设置PowerShell脚本来创建备份SQL Express数据库的计划任务。我按照这里的说明进行操作:
他们在大多数任务中都能很好地工作,但是我需要做的论证已经包含了双引号和单引号,并且它正在抛弃一切。我在任务计划程序中的参数是:
/C osql -U sa -P Password -S localhost\INSTANCE -Q "Backup Database DATABASE to disk = 'C:\DB Backups\database.bak' with init"
使用引号和单引号,如何将整个字符串转换为变量?
编辑:失败的具体部分是:
Function Create-AndRegisterApplogTask
{
Param ($taskname, $taskpath)
$action = New-ScheduledTaskAction -Execute 'CMD' -Argument "/C osql -U sa -
P Password -S localhost\INSTANCE -Q "Backup Database DATABASE to disk = 'C:\DB Backups\database.bak' with init""
$trigger = New-ScheduledTaskTrigger -Daily -At 9am
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName
$taskname -Description "Daily Backup of IRWSDB Database" -TaskPath $taskpath
}
这是错误的,因为它正在看
"/C osql -U sa -P Cedara123 -S localhost\WEBACCESS -Q "
在引号中,然后看到:
Backup Database IRWSDB to disk =
在引用之外,然后
'C:\DB Backups\IRWSDB.bak'
用单引号,然后再用
with init
除了引号之外,最后只是:
""
我也尝试将-Argument参数更改为$ Argument并尝试声明:
$argument = "/C osql -U sa -P Password -S localhost\INSTANCE -Q "Backup Database DATABASE to disk = 'C:\DB Backups\database.bak' with init""
但我仍然无法弄清楚如何将其显示为一行文字。
答案 0 :(得分:1)
您可以使用反引号转义字符串中的双引号。尝试:
$Arguments = "/C osql -U sa -P Password -S localhost\INSTANCE -Q `"Backup Database DATABASE to disk = 'C:\DB Backups\database.bak' with init`""
如果命令变得太棘手,通常我最终会得到一个批处理脚本。