我正在使用 PowerShell 4.0 和 SQLPS 插件来处理 SQL Server。
ForEach($Database in (Get-ChildItem -FORCE SQLSERVER:\SQL\localhost\DEFAULT\Databases))
{
Write-Host $Database
}
这会输出我在本地拥有的数据库列表,例如:
[Test_1] [DBA] [Test_2]
但是,如果我尝试对 $Database 做一些事情,比如
ForEach($Database in (Get-ChildItem -FORCE SQLSERVER:\SQL\localhost\DEFAULT\Databases))
{
Invoke-Sqlcmd -Database $Database -HostName WIN-MAINV98PDFA -Query "select db_name()" -ServerInstance LocalHost
}
我收到一个错误:
警告:使用提供者上下文。服务器 = 本地主机。Invoke-Sqlcmd:无法打开登录请求的数据库“[Test_1]”。登录失败。用户 'WIN-MAINV98PDFA\admin' 登录失败。在 line:3 char:5 + Invoke-Sqlcmd -Database $Database -HostName WIN-MAINV98PDFA -Query "select d ... + ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
我认为问题归结为括号之间的差异。
作品:
Invoke-Sqlcmd -Database Test_1 -HostName WIN-MAINV98PDFA -Query "select db_name()" -ServerInstance LocalHost
和
失败:
Invoke-Sqlcmd -Database [Test_1] -HostName WIN-MAINV98PDFA -Query "select db_name()" -ServerInstance LocalHost
这似乎应该起作用。我错过了什么?