PowerShell脚本中如何声明表列变量读取Azure数据库列值
PowerShell读取Azure SQL查询结果指定字段实现方案
将Invoke-Sqlcmd的执行结果赋值给变量后,可直接通过列名属性访问对应字段值,无需额外做字段映射。
实现逻辑
- 接收查询返回的结果对象
- 直接通过
.VMStatus属性读取目标字段值存入变量,用于后续条件判断和更新操作
你的查询条件已经通过唯一主键
idVMProperties限定了单条返回结果,不需要额外做结果遍历;如果后续有多条结果查询需求,遍历结果集取每条记录的.VMStatus属性即可。
修改后可直接运行的示例代码
# Import the module #Import-Module -Name SqlServer #Set Azure subscription #az account set --subscription "subscriptionid" # 定义查询语句 $query = "select * from Sys_Mst_VMProperties where Name = 'test7777' and idVMProperties = 1961" # 配置数据库连接参数 $Params = @{ 'ServerInstance' = 'instance.database.windows.net'; 'Database' = 'dbname'; 'Username' = 'userid'; 'Password' = 'pwd'; 'Query' = $query; } # 执行查询并将结果存入变量 $queryResult = Invoke-Sqlcmd @Params # 空结果校验,避免后续取值报错 if (-not $queryResult) { Write-Error "未查询到符合条件的记录,请检查查询条件" exit 1 } # 读取VMStatus字段值存入指定变量 $VMStatus = $queryResult.VMStatus # 后续if/else判断+更新逻辑示例 if ($VMStatus -eq 'Running') { # 构造更新语句 $updateQuery = "UPDATE Sys_Mst_VMProperties SET VMStatus = 'Stopped' WHERE idVMProperties = 1961" # 复用连接参数替换查询语句执行更新 $updateParam = $Params.Clone() $updateParam.Query = $updateQuery Invoke-Sqlcmd @updateParam } else { Write-Host "当前VM状态为 $VMStatus,不满足更新条件" }
注意事项
- 执行脚本前请确认SqlServer模块已正确导入,否则
Invoke-Sqlcmd命令无法正常调用 - 拼接UPDATE语句时注意转义字符串中的单引号等特殊字符,避免SQL语法错误
- 生产环境建议不要在脚本中硬编码数据库密码,可使用Azure Key Vault等服务存储敏感凭据
内容的提问来源于stack exchange,提问作者Lokesh M
相关产品推荐
相关产品推荐

