I am new to PowerShell.
Trying to understand how to use ForEach-Object
command to iterate through each database on a server.
However it only bring master database multiple times and doesn't seems to be iterating through the rest of them.
# generate list of databases to iterate through
$DB = Invoke-SqlCmd -ServerInstance databasecluster -Database master -Query "SELECT [name] AS [Database] FROM sys.databases ORDER BY 1 DESC;"
$Query = "select DB_name();"
$DB | ForEach-Object{
$DB = "$_";
Invoke-Sqlcmd -Query $Query -ServerInstance myinstance;
}
What am I missing here?
UPDATE
PS C:\> $DB = Invoke-SqlCmd -ServerInstance myinstance -Database master -Query "SELECT [name] AS [Database] FROM sys.databases ORDER BY 1 DESC;"
>> $Query = "select DB_name();"
>> $DB | ForEach-Object{
>> $DB = "$_";
>> Invoke-Sqlcmd -ServerInstance myinstance -Database $DB -Query $Query
>> }
Error
*Invoke-Sqlcmd : Cannot open database "System.Data.DataRow" requested by the login. The login failed.
Login failed for user 'domain\username'.
At line:5 char:14
+ ... Invoke-Sqlcmd -ServerInstance myinstance -Database $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException
+ FullyQualifiedErrorId : SqlExceptionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand*