【发布时间】:2018-05-31 05:35:09
【问题描述】:
我编写了一个 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"
【问题讨论】:
-
我们可以看看你的 powershell 脚本吗?
-
你的意思是它不能让你正确检索服务器名称?您是否打印了
$servers以检查您是否确实存储了结果并使用GetType()命令检查$servers是否实际上是一个列表? -
在原帖中添加了脚本,谢谢!
标签: powershell