Estou tentando reunir todas as informações do dbfile em todas as nossas instâncias sql em um de nossos ambientes. É um ambiente bastante grande e seria tedioso executar uma instância por vez. Eu pensei que haveria uma maneira fácil de fazer isso com o Powershell, mas parece que estou enfrentando um obstáculo.
Eu tenho uma lista de instâncias armazenadas em uma tabela/visualização [vSQLInstances]. Se eu passar esses valores para uma variável e usar essa variável como o parâmetro SQLInstance, recebo um erro.
Script que estou usando...
$sqlinstance = Invoke-DbaQuery -SqlInstance dbasql01\sql2019 -Database DBAEstate -Query "select sqlinstance from vSQLInstance;"
Get-DbadbFile -SqlInstance $sqlinstance | Select-Object sqlinstance, database, logicalname, size
O erro que recebo:
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
Sim, isso é esperado porque você está passando um tipo DataRow. Em vez disso, você pode passá-lo como um tipo de string
$sqlinstance.sqlinstance
(o nome da coluna) como um parâmetro paraGet-DbaDbFile
obter os resultados.Por exemplo...