powershell - Powershell 查询数据库并将结果存储在变量中
问题描述
我编写了一个 powershell 脚本来查询数据库以获取服务器名称列表。然后我将结果存储在一个变量中,这样我就可以通过每个服务器来查找服务,方法是:foreach ($server in $servers)
. 将结果存储在变量中没有问题,但是当我执行 foreach 语句时,它不会让我正确地检索服务器名称 1 by 1。
如果我手动输入服务器名称,$servers = (server, server2,server3)
那么forEach
它将起作用。这样做的正确方法是什么?
更新:以下是脚本
$SQLServer= 'sourceServer'
$Database = 'DatabaseNameHere'
创建 SQL 查询函数
Function SQL_Query ($Query) {
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString =
"Server=$SQLServer;Database=$Database;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandText = $Query
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$a=$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
}
使用此功能
$list=SQL_Query "Select ServerName From Server_Inventory Where Status = 'A' "
检查返回的服务器列表
$list
我想遍历每台服务器,看看每台服务器上安装了哪些服务器
$output= Foreach ($server in $list) {
$output=Get-DbaSqlService -ComputerName $server | Where-Object
{$_.ServiceType -in ('SSIS','Agent','Engine','SSRS','FullText')}
}
$output | Out-GridView -Title "View all SQL Services"
解决方案
$DataSet.Tables[0]
是一个将查询中的列作为属性的对象。在您的情况下$list
,将是一个具有属性 ServerName 的 PowerShell 对象。
解决方案 1
调用时Get-DbaSqlService -ComputerName $server
,您将传递一个整个对象,您只想提供名称,当您将其更改为时,Get-DbaSqlService -ComputerName $server.ServerName
您将只传递属性 ServerName 的值。
解决方案 2
由于您只想探索 Servername 属性,您已经可以扩展它,以便$list
代表您的期望。因此,您应该添加Select-Object -ExpandProperty ServerName
您定义的位置$list
。
所以
$list = SQL_Query "Select ServerName From Server_Inventory Where Status = 'A' "
变成
$list = SQL_Query "Select ServerName From Server_Inventory Where Status = 'A' " | Select-Object -ExpandProperty ServerName
加法变量在每个循环中被覆盖
。$output
每个服务器的结果应附加到输出变量。
$output = @()
Foreach ($server in $list) {
$output += Get-DbaSqlService -ComputerName $server | Where-Object {$_.ServiceType -in ('SSIS','Agent','Engine','SSRS','FullText')}
}
$output | Out-GridView -Title "View all SQL Services"
推荐阅读
- reactjs - React Hooks 立即更改 div 内的数据
- perl - 如何确定模式在字符串中匹配的位置?
- c++ - 字符串的位操作
- android-studio - 无法生成 APK 文件夹(Gradle 问题)
- react-native - 向文本添加实心笔触
- uno-platform - 有没有办法摆脱 Web 组装中的厚度 ContentDialog ?
- jquery - 如果DataTable中的记录数超过AJAX成功调用的1条lac记录,如何自动下载excel文件?
- javascript - 为什么通过锚链接而不是 routerLink 导航时加载背景图像?
- javascript - 是什么导致该组件检测到其 props 的变化?
- node.js - 未捕获的错误:超过了 2097152 字节的 DelayedStream#maxDataSize