我正在尝试在我们的一个环境中收集所有 sql 实例的所有 dbfile 信息。这是一个相当大的环境,一次执行一个实例会很乏味。我认为使用 Powershell 会有一种简单的方法来做到这一点,但我似乎遇到了障碍。
我有一个存储在表/视图 [vSQLInstances] 中的实例列表。如果我将这些值传递给一个变量,然后将该变量用作 SQLInstance 参数,则会出现错误。
我正在使用的脚本...
$sqlinstance = Invoke-DbaQuery -SqlInstance dbasql01\sql2019 -Database DBAEstate -Query "select sqlinstance from vSQLInstance;"
Get-DbadbFile -SqlInstance $sqlinstance | Select-Object sqlinstance, database, logicalname, size
我收到的错误:
Get-DbaDbFile : Cannot process argument transformation on parameter 'SqlInstance'. Cannot convert value
"@{sqlinstance=PRODSQLD\D}" to type "Sqlcollaborative.Dbatools.Parameter.DbaInstanceParameter". Error: "Failed to interpret
input as Instance: @{sqlinstance=PRODSQLD\D}"
At line:11 char:28
+ Get-DbaDbFile -SqlInstance $instancelist
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Get-DbaDbFile], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Get-DbaDbFile
是的,这是意料之中的,因为您传入的是 DataRow 类型。相反,您可以将其作为字符串类型
$sqlinstance.sqlinstance
(列名)作为参数Get-DbaDbFile
传递以获取结果。例如...