powershell - 无法将 PowerShell 变量从数组插入 Invoke-Sqlcmd 调用
问题描述
我有一个数组,它遍历一个字符串,为元素赋值。如果我然后将这些元素分配给一个变量并将该变量传递给 invoke-sqlcmd 我会收到一个错误。但是,如果我将值直接分配给变量并将其传递给它,它就可以正常工作:
为数组赋值:
for ($i=0; $i -lt $somearray.length; $i++) {
$somearray[$i] = $somearray[$i].Replace('$(query)', $query.text)
}
可以说 somearray[0] = "select * from DB"。我们将分配给一个变量:
$query = somearray[0]
现在我把它传给我的Invoke-Sqlcmd
:
Invoke-Sqlcmd -Query $query -Database "local" -ServerInstance "somedb" |
Export-Csv ".\somefile.csv"
这失败了:
Invoke-Sqlcmd:找不到存储过程“从警报中选择 *”。 在 C:\Migration\ExportTool\ExportTool\Gavs.ps1:95 char:17 + ... 调用-Sqlcmd -Query $query -Database $db -ServerInstance ...
但是,如果我这样做:
$query = "select * from DB"
Invoke-Sqlcmd -Query $query -Database "local" -ServerInstance "somedb" |
Export-Csv ".\somefile.csv"
它完美地工作。
解决方案
所以原因似乎是,如果你这样做:
$query = somearray[0]
当您在 Invoke-sql 命令中查看 $query 时,它看起来像这样:
"select * from DB"
当你这样做时:
$query = "select * from DB"
它看起来像这样:
select * from DB
因此,直接引用字符串会删除 Invoke-sqlcmd 命令中的引号。看起来很奇怪。
希望这对将来的某人有所帮助。
推荐阅读
- javascript - 在 React Native 中更新图像
- typescript - typescript - 通过使用变量索引对象接口来获取类型
- python - python tkinter中的after()方法面临一些问题
- dataframe - Julia DataFrame 中的左外连接问题
- c# - 微服务之间如何建立通信?
- android - 使用 Altbeacon 库传输带有名称的 Eddystone 信标
- android - 排球 405 错误:com.android.volley.ClientError
- angular - 仅在需要时加载子元素
- python - 在numpy中提取一个不连续的子矩阵
- node.js - 出于安全原因,nodejs重新编码上传的文件....但是如何?