【发布时间】:2014-08-21 14:15:17
【问题描述】:
我正在使用 PowerShell 4.0 和 SQLPS 插件来处理 SQL Server。
ForEach($Database in (Get-ChildItem -FORCE SQLSERVER:\SQL\localhost\DEFAULT\Databases))
{
Write-Host $Database
}
这会输出我在本地拥有的数据库列表,例如:
[测试_1] [数据库管理员] [测试_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
}
我收到一个错误:
警告:使用提供者上下文。服务器 = 本地主机。调用-Sqlcmd : 无法打开登录请求的数据库“[Test_1]”。登录 失败的。用户 'WIN-MAINV98PDFA\admin' 登录失败。在线:3 字符: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
这似乎应该可行。我错过了什么?
【问题讨论】:
标签: powershell sqlps