包含双引号和单引号的 Powershell 变量
Powershell variable that contains double and single quotes
诚然,菜鸟问题...我正在尝试设置 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""
但我仍然不知道如何让它显示为一行文本。
您可以使用反引号转义字符串中的 double-quotes。尝试:
$Arguments = "/C osql -U sa -P Password -S localhost\INSTANCE -Q `"Backup Database DATABASE to disk = 'C:\DB Backups\database.bak' with init`""
如果命令太棘手,我通常会以 batch-script 结束操作。
诚然,菜鸟问题...我正在尝试设置 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""
但我仍然不知道如何让它显示为一行文本。
您可以使用反引号转义字符串中的 double-quotes。尝试:
$Arguments = "/C osql -U sa -P Password -S localhost\INSTANCE -Q `"Backup Database DATABASE to disk = 'C:\DB Backups\database.bak' with init`""
如果命令太棘手,我通常会以 batch-script 结束操作。