繁体   English   中英

将Invoke-SQL查询与Foreach循环一起使用

[英]Using Invoke-SQL query with Foreach loop

我有一个导入到的实例列表

$ SQLServerList

我想让他们在每个实例上查找数据库。

foreach ($server in $SQLServerList ){
    Invoke-Sqlcmd -Query "use master select name, database_id, create_date, recovery_model_desc from sys.databases"  -ServerInstance $server
}

但是,这不会运行我在做什么错?

给定一个CSV文件,其中“ Server”列包含服务器名称,使用

$SQLServerList = import-csv servers.csv

在文件上将返回具有NoteProperty'Server 'Server'的对象。 (想象一下,csv有多个列,您需要一种方法来标识正在访问的列,并且$SQLServerList对象将为每个列包含一个属性)。

foreach ($server in $SQLServerList)使用此命令时foreach ($server in $SQLServerList)$SQLServerList$server代表整个对象,将其传递给invoke-sqlcmd并没有多大意义,因此需要$Server.Server

或者, $SQLServerList = (import-csv servers.csv).Server返回一个字符串数组,应该可以直接在foreach ($server in $SQLServerList)

使用下面的内容,应该可以更轻松地解决错误。。查看计数是否与CSV文件中的计数匹配。 您也可以将其列出来查看CSV的内容。此外,将正在使用的数据库从脚本内部更改为参数-Database。

$inputfile = "C:\Databases\JUSTCREATED.csv"


[Array]$SQLServerList = get-content -Path $inputfile

$SQLServerList.count

foreach ($server in $SQLServerList ){


    Write-Output $server
    try{
    Invoke-Sqlcmd -Query " select name, database_id, create_date, recovery_model_desc from sys.databases"  -ServerInstance $server -Database master
        }
        catch 
        {

        Write-Output $_.Exception.Message


        }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM