1

我的问题的背景

在任何时候,我都期待着穿着黑色西装和黑色太阳镜的保安人员来带我走,因为我所有的 sql server 登录尝试......

我使用并改编了iris classon 的示例以通过 Powershell 连接到数据库。修改后的代码使用 Integrated Security=True"

$dataSource = my_enterprise_db_server
$database = my_db
$connectionString = "Server=$dataSource;Database=$database;Integrated Security=True;" 
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$table = new-object “System.Data.DataTable”
$query = "..."
$connection.Open()
$command = $connection.CreateCommand()
$command.CommandText  = $query
...

有效的热狗。谢谢鸢尾花。

我阅读了snapin 和 Import-Module sqlps执行 sql 命令的方式。我还阅读了Michael Sorens在他的回答中提供的所有链接。我可以挂载一个 sqlserver 连接mount mydb SQLSERVER SQLSERVER:\SQL,使用 ls 或 dir,沿着对象的路径走,等等。我还修改了 Iris 提供的主要部分

$table = Invoke-Sqlcmd –Server $dataSource –Database $database -Query $query

这个版本的 Invoke-Sqlcmd 允许我连接到“企业”数据库。提供的所有参考资料的问题是他们希望您使用 localhost sqlexpress 数据库。我尝试使用的那一刻

Set-Location SQLSERVER:\SQL\my_enterprise_db_server\my_db

或类似的结构,我收到一条以

...警告:无法获取 SQL Server 服务信息。尝试连接到“my_enterprise_db_server”上的 WMI 失败,出现以下错误:访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))

我还看到提到了 SQLCMDSERVER 和 SQLCMDDBNAME 环境变量。我将这些设置为

$env:SQLCMDDBNAME = "my_db"
$env:SQLCMDSERVER = "my_enterprise_db_server"
set-location sqlserver:\sql
ls

生产

MachineName                     
-----------                     
localhost   

问题

对于不在本地计算机上的数据库,如何正确使用 set-location 或 New-PSDrive-Name?

4

1 回答 1

1

我通过偶然的途径找到了答案。我在 sql server management studio 中右键单击了一个数据库对象。有一个启动 powershell 的选项。尽管这看起来像 order sqlps 选项,但 SSMS 给了我设置位置的正确方法。

选项 1. 如果服务器没有实例,则在斜杠路径中的 server_name 之后添加 DEFAULT。

Set-Location SQLSERVER:\SQL\server_name\DEFAULT\Databases\database_name\Tables\dbo.table_name

选项 2。如果您有一个带有实例的服务器,则在斜线路径中的 server_name 之后设置实例名称。

Set-Location SQLSERVER:\SQL\server_name\instance_name\Databases\database_name\Tables\dbo.table_name

就数据库安全而言,我只是一个凡人。SSMS 的许多功能对我来说都是关闭的,因为我的安全设置与 dba 安全设置的配置方式不同。我一直在 SSMS 中收到错误。那么这与使用 Set-Location 的 Powershell 没有什么不同。我没有意识到由于安全策略配置与飞行员错误相关的两个错误消息。如果我将位置设置为表,那么我只有两个拒绝访问的警告。如果我将位置设置为数据库级别,那么 Powershell 会破坏一些块,但我有我的斜线路径设置。如果我使用 Invoke-SqlCmd,我看不到错误。我现在看到,Powershell 中出现安全错误的方式是我认为尝试连接数据库的方式存在问题的原因。

mount rb SELSERVER SQLSERVER:\SQL\server_name\DEFAULT\Databases\database_name\Tables
# Look at a list of tables.
ls
# Go to a traditional file system
cd F:\
# Go to the Linux Style mounted file system
cd rb:\
# Go to a table like a directory
cd dbo.my_table_name
# Look at the column names
ls
# Use relative navigation
cd ..\dbo.my_other_table_name
ls
# Compare column names with another table using relative navigation after I have just
# listed the current directory/table that I am in.
ls ..\dbo.my_table_name

那只是摇滚!现在我需要做的就是想出一组服务器名称和数据库,为我可以连接的所有数据库创建挂载点。像这样的数组只是在乞求迭代以创建所有挂载点。

于 2014-12-18T18:31:09.277 回答