我有一个已导入
的实例列表$ SQLServerList
我想让他们在每个实例上查找数据库。
foreach ($server in $SQLServerList ){
Invoke-Sqlcmd -Query "use master select name, database_id, create_date, recovery_model_desc from sys.databases" -ServerInstance $server
}
然而,这不会影响我做错了什么?
答案 0 :(得分:0)
给定一个包含列'服务器'的CSV文件包含服务器名称,使用
$SQLServerList = import-csv servers.csv
将返回带有NoteProperty 'Server'
的对象。 (想象一下,csv有多个列,您需要一种方法来识别您正在访问哪一个,$SQLServerList
对象将包含每列的属性。)
在foreach ($server in $SQLServerList)
中使用此内容时,$SQLServerList
和$server
代表整个对象,在传递给invoke-sqlcmd
时没有多大意义,所以{{ 1}}是必需的。
或者,$Server.Server
返回一个字符串数组,应该可以直接在$SQLServerList = (import-csv servers.csv).Server
答案 1 :(得分:0)
使用以下内容可以更轻松地排除错误。查看计数是否与CSV文件中的计数相符。您还可以列出它以查看CSV的内容..并将正在使用的数据库从脚本内部更改为参数 - 数据库。
$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
}
}