【发布时间】:2021-12-17 07:25:52
【问题描述】:
我有一个按预期运行的 SQL 查询,但是当我尝试在 PowerShell 'Invoke-SqlCmd' 模块中使用它时,输出的结果与查询数据库时不同。我注意到关于这个模块有很多问题,但我找不到适用于我的情况的问题。
查询:
$SQLServer = "localhost"
$query = "SELECT Groups.[Name] AS AGname FROM sys.dm_hadr_availability_group_states States INNER JOIN master.sys.availability_groups Groups ON States.group_id = Groups.group_id WHERE primary_replica = @@Servername"
$HAGName = Invoke-Sqlcmd -query $query -ServerInstance $SQLServer -Database 'database'
if ($HAGName = !$null) {
write-host "Availability group name is $HAGName"
exit 0
}
else {
write-host "Failed to retrieve High Availability group name = [$HAGName]"
exit 1
}
PowerShell 中的输出: 'Availability group name is True'
就像我提到的,当直接查询 SQL Server 时,我得到了正确的输出。我尝试使用“OutputAs”开关,但没有帮助。
任何帮助将不胜感激。
【问题讨论】:
-
如果没有返回行,您似乎更不理解
Invoke-SqlCmd返回NULL;那不是真的。如果$query的值是SELECT name FROM sys.databases WHERE 1 = 0;,那么$HAGName = !$null仍然是TRUE。 -
请注意,您所做的是作业,我认为您的意思是
$HAGName -ne $null,但Larnu 的评论仍然适用。 -
@Larnu,无论如何我都不是一个 SQL 人,这是我从公司的高级 DBA 那里得到的查询,所以我倾向于认为它应该是可靠的。您能否详细说明您认为命令失败的原因?
-
-not $null是True并且您将其分配给变量$HAGName正如其他人之前评论的那样。将if ($HAGName = !$null) {替换为if ($null -ne $HAGName) {。
标签: sql-server powershell invoke-sqlcmd