Powershell:/ TargetFile你必须在' /'之后提供一个值表达式。操作员错误

时间:2018-05-08 16:05:04

标签: powershell azure-devops

我正在尝试在我的VSTS powershell脚本中实现以下示例(link。第一个示例)来创建数据库快照(.bacpac)文件但是获取

  

' / TargetFi ...
  +〜
  您必须在' /'之后提供值表达式。操作员'错误。

尝试了很多东西但是这个错误在我的Powershell任务的内联脚本中是持久的。似乎这个错误在运行变量和类似情况时非常常见,但我无法找到我特定问题的答案。

'C:ProgramFiles(x86)\Microsoft SQL Server\130\DAC\bin\SqlPackage.exe' /TargetFile:"<C:\Temp\test.dacpac>" /Action:Extract /SourceServerName:"<localhost>" /SourceDatabaseName:"<MyDataBase>" /SourceUser:"<sa>" /SourcePassword:"<MyPa55w0d>"

2 个答案:

答案 0 :(得分:1)

尝试使用call operator,如下所示:

& "C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin\SqlPackage.exe" /TargetFile:"<C:\Temp\test.dacpac>" /Action:Extract /SourceServerName:"<localhost>" /SourceDatabaseName:"<MyDataBase>" /SourceUser:"<sa>" /SourcePassword:"<MyPa55w0d>"

否则PowerShell只是说&#34;嘿,这是一个很好的字符串&#34;,哦,这个/TargetFile切换是什么意思?

要明白我的意思:

"notepad.exe"

应该只打印&#34; notepad.exe&#34;作为一个字符串。这一个:

"notepad.exe" C:\temp.txt

感到困惑,因为它不知道如何处理你传递给字符串的C:\temp.txt参数。要让它启动notepad.exe创建一个新文件:

& "notepad.exe" C:\temp.txt

作品!

答案 1 :(得分:0)

以上所有评论和答案都增加了一个值,帮助我解决了我的问题。以下是我的答案(对于像我这样的新手)以及我学到的一些关键点

& "C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin\SqlPackage.exe" /TargetFile:"C:\Temp\test.dacpac" /Action:Extract /SourceServerName:"localhost" /SourceDatabaseName:"MyDatabase" /SourceUser:"sa" /SourcePassword:"MyPa55w0d"
  • 应该以&amp;开头根据{{​​3}}和mklement0
  • 的建议进行签名
  • SQLPackage.exe路径错误。它应该是
  

C:\ Program Files(x86),而不是C:ProgramFiles(x86)

根据Daniel Morritt

的建议
  • 值不应被尖括号(&lt;,&gt;)括起来。内联Powershell不会识别这些括号,我收到错误。通过从脚本文件和不同版本运行脚本,不知道它是否相同。