包含双引号和单引号的 Powershell 变量

Powershell variable that contains double and single quotes

提问人:Christopher Cass 提问时间:3/24/2018 最后编辑:Christopher Cass 更新时间:3/24/2018 访问量:4056

问:

诚然,菜鸟问题......我正在尝试设置一个 PowerShell 脚本来创建计划任务来备份 SQL Express 数据库。我按照这里的说明进行操作:

https://blogs.technet.microsoft.com/heyscriptingguy/2015/01/16/use-powershell-to-create-scheduled-task-in-new-folder/

它们在大多数任务中都工作得很好,但我需要提出的论点已经包含双引号和单引号,它把一切都搞砸了。我在任务计划程序中的论点是:

/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 参数更改为 just $Argument并尝试声明:

$argument = "/C osql -U sa -P Password -S localhost\INSTANCE -Q "Backup Database DATABASE to disk = 'C:\DB Backups\database.bak' with init""

但我仍然无法弄清楚如何让它显示为一行文本。

PowerShell 变量 引用 sql-server-express 单引号

评论

0赞 Bill_Stewart 3/24/2018
请发布您正在运行的确切 PowerShell 命令,并准确解释为什么它不起作用。
0赞 Christopher Cass 3/24/2018
使用该信息进行编辑
0赞 Bill_Stewart 3/24/2018
通常更容易将所需的命令放在脚本(批处理文件)中并计划脚本。(这也使更新要运行的命令变得更加容易 - 只需更新脚本即可。

答:

1赞 Frode F. 3/24/2018 #1

您可以使用反引号转义字符串中的双引号。尝试:

$Arguments = "/C osql -U sa -P Password -S localhost\INSTANCE -Q `"Backup Database DATABASE to disk = 'C:\DB Backups\database.bak' with init`"" 

通常,如果命令变得太棘手,我最终会为操作提供批处理脚本。

评论

0赞 Christopher Cass 3/24/2018
这效果很好!谢谢!老实说,执行批处理脚本是理想的,但实际的备份位置取决于注册表项,并且在任何服务器上都可能不同。因此,一旦我确认我可以让它工作,我就必须用变量替换一些额外的部分,包括这条线的部分,所以弄清楚如何把这条线放进去对我来说很关键。谢谢!