ConnectionString 属性 不打印连接字符串
ConnectionString property not printing connection string
我正在尝试使用以下脚本获取数据库数据源的连接字符串:
$Analysis_Server = New-Object Microsoft.AnalysisServices.Server
$Analysis_Server.connect("$server")
$database = $Analysis_Server.Databases[7]
$c = $database.DataSources[0].ConnectionString
$c
没有输出。
我试过这样调试:
$Analysis_Server.Databases
这将打印出服务器上的所有数据库
如果我索引它$Analysis_Server.Databases[]
,它会打印索引的任何数据库(所以在我的例子中,7,打印数据库8)
很明显,数据库 属性 正在运行。
-------------更新:-------------
这是数据库在服务器中的样子
以下每一行的作用如下:
$Analysis_Server.Databases
这会打印出
可以注意到的一件事是出于某种原因,它们不是按照图片中在分析服务器上的顺序打印出来的……我不知道为什么会这样
这是此命令打印出的内容:
Analysis_Server.Databases[0]
既然索引 0 起作用了,我们应该能够索引 [1], [2]
,等等...
所以下面
Analysis_Server.Databases[1]
Analysis_Server.Databases[2]
打印:
现在连接字符串:
$Analysis_Server.Databases[0].DataSources[0].ConnectionString
打印出:
Connection Timeout=60;User Id=someID;Data Source=10.10.10.10;Persist Security Info=True
它似乎是 Database8 的连接字符串
太棒了,那么我们也应该能够做到这一点:
$Analysis_Server.Databases[1].DataSources[0].ConnectionString
但是,没有打印任何内容!似乎打印的唯一索引是 Databases[0]
这是 $Analysis_Server.Databases[0].DataSources[0]
打印的内容:
我们应该能够对所有数据库执行相同的操作
$Analysis_Server.Databases[1].DataSources[0]
$Analysis_Server.Databases[2].DataSources[0]
等..
但没有打印任何内容!
在此处的 post 中找到:http://www.mrtsql.com/2011/03/powershell-updating-analysis-services.html
看看那个 post 中的这个函数是否能帮助你。
function UpdateDataSources()
{
# Lets get our server name
$SSASServerName="$env:ComputerName\" + $SSASInstanceName
$MyConnection = New-Object("Microsoft.AnalysisServices.Server")
$MyConnection.Connect($SSASServerName)
# lets return the number of data sources
[int]$DataSourcecount=$MyConnection.Databases[$DatabaseName].DataSources.count
for ($count=0; $count -ne $DataSourcecount;++$count)
{
$MyCS=$MyConnection.Databases[$DatabaseName].DataSources[$count].ConnectionString
$NewCS=setNewValue -MyCS $MyCS -Pattern "Data Source=" -ReplaceWith $DataSourceServer
if ($PW.Length -ne 0)
{
$NewCS=setNewValue -MyCS $NewCS -Pattern "Password=" -ReplaceWith $PW
}
if ($UserName.length -ne 0)
{
$NewCS=setNewValue -MyCS $NewCS -Pattern "User ID=" -ReplaceWith $UserName
}
$MyConnection.Databases[$DatabaseName].DataSources[$count].ConnectionString=$NewCS
# write the change back to SSAS
$MyConnection.Databases[$DatabaseName].DataSources[$count].update()
write-output $NewCS
}
}
并不是说我有一个答案给你,但我认为你可以使用另一种方法来获得你需要的东西,同时等待微软的支持。
我正在开发 AX 2012 演示系统,即 运行 SQL Server 2014。它在同一个实例中有多个 olap 数据库。我已经编辑了所有数据源以指向不同的数据库,以表明我们得到了正确的细节。
我在测试时安装了最新的 SQL Server PowerShell 模块。
Install-Module SqlServer -Force -Confirm:$false
Import-Module SqlServer
现在您应该有一个新的 PowerShell 提供程序,它使您能够像文件系统一样遍历 SQL 服务器
Get-PSProvider
Name Capabilities Drives
---- ------------ ------
Registry ShouldProcess, Transactions {HKLM, HKCU}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess, Credentials {C, E, A, D...}
Function ShouldProcess {Function}
Variable ShouldProcess {Variable}
SqlServer Credentials {SQLSERVER}
Certificate ShouldProcess {Cert}
WSMan Credentials {WSMan}
有了我们的帮助,您应该能够执行以下操作,这应该会产生正确的结果
#Connect to the SSAS part of the sql server
PS C:\Users\Administrator> cd SQLSERVER:\SQLAS
#List all local instances
PS SQLSERVER:\SQLAS> dir
Host Name
---------
AX2012R2A
HTTP_DS
#Connect to the server (local) - you should be able to type in a valid network name
PS SQLSERVER:\SQLAS> cd AX2012R2A
#List all instances on that server
PS SQLSERVER:\SQLAS\AX2012R2A> dir
Instance Name
-------------
DEFAULT
POWERPIVOT
TABULAR
#Connect to the default instance on the server you are connected to
PS SQLSERVER:\SQLAS\AX2012R2A> cd default
#List all available collections / areas
PS SQLSERVER:\SQLAS\AX2012R2A\default> dir
#Connect to the databases area
PS SQLSERVER:\SQLAS\AX2012R2A\default> cd databases
#List all databases that are available
PS SQLSERVER:\SQLAS\AX2012R2A\default\databases> dir
Name State Read-Write Mode
---- ----- ---------------
Demand Forecast Accuracy initial Processed ReadWrite
Demand Forecast Accuracy ps Processed ReadWrite
Demand Forecast initial Processed ReadWrite
Demand Forecast ps Processed ReadWrite
Dynamics AX initial Processed ReadWrite
Dynamics AX ps Processed ReadWrite
#Getting the same result with Get-ChildItem
PS SQLSERVER:\SQLAS\AX2012R2A\default\databases> Get-ChildItem
Name State Read-Write Mode
---- ----- ---------------
Demand Forecast Accuracy initial Processed ReadWrite
Demand Forecast Accuracy ps Processed ReadWrite
Demand Forecast initial Processed ReadWrite
Demand Forecast ps Processed ReadWrite
Dynamics AX initial Processed ReadWrite
Dynamics AX ps Processed ReadWrite
#Traverse all databases and show their connection string details
PS SQLSERVER:\SQLAS\AX2012R2A\default\databases> Get-ChildItem | ForEach-Object {$_.Datasources}
Name Isolation Max Connections Connection String
---- --------- --------------- -----------------
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_1
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_2
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=MicrosoftDynamicsAX
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_4
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_5
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_6
PS SQLSERVER:\sqlas\ax2012r2A\default\databases> Get-ChildItem | ForEach-Object {$_.Datasources | ForEach-Object {$_.Connectionstring}}
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_1
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_2
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_3
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_4
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_5
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_6
我想说这应该能让您继续,因为您现在可以相信您拥有正确的连接字符串详细信息。我与您的其他问题相关 - 这应该为您提供要生成的更改脚本的所有详细信息,因此您可以按照 SQL 服务器对您的期望提供整个更改语句。
我只是稍微尝试了一下,以确保我理解您所面临的问题。在同一个盒子上,仍然加载了最新的可用 SqlServer PowerShell 模块 - 我得到了这些结果。
PS C:\Users\Administrator> $Analysis_Server = New-Object Microsoft.AnalysisServices.Server
PS C:\Users\Administrator> $Analysis_Server.connect("AX2012R2A")
PS C:\Users\Administrator> $Analysis_Server.Databases
Name State Read-Write Mode
---- ----- ---------------
Demand Forecast ps Processed ReadWrite
Demand Forecast Accuracy ps Processed ReadWrite
Demand Forecast Accuracy initial Processed ReadWrite
Dynamics AX ps Processed ReadWrite
Demand Forecast initial Processed ReadWrite
Dynamics AX initial Processed ReadWrite
现在我遍历每个数据库及其数据源,以显示连接字符串
PS C:\Users\Administrator> $Analysis_Server.Databases | ForEach-Object {$_.datasources}
Name Isolation Max Connections Connection String
---- --------- --------------- -----------------
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_4
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_2
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_1
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_6
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_3
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_5
单行代码只提供连接字符串,仅提供连接字符串
PS C:\Users\Administrator> $Analysis_Server.Databases | ForEach-Object {$_.datasources | ForEach-Object {$_.ConnectionSt
ring}}
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_4
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_2
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_1
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_6
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_3
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_5
您能否花点时间尝试安装最新的 SqlServer PowerShell 模块,看看这对您和您面临的问题是否有帮助?
我正在尝试使用以下脚本获取数据库数据源的连接字符串:
$Analysis_Server = New-Object Microsoft.AnalysisServices.Server
$Analysis_Server.connect("$server")
$database = $Analysis_Server.Databases[7]
$c = $database.DataSources[0].ConnectionString
$c
没有输出。
我试过这样调试:
$Analysis_Server.Databases
这将打印出服务器上的所有数据库
如果我索引它$Analysis_Server.Databases[]
,它会打印索引的任何数据库(所以在我的例子中,7,打印数据库8)
很明显,数据库 属性 正在运行。
-------------更新:-------------
这是数据库在服务器中的样子
以下每一行的作用如下:
$Analysis_Server.Databases
这会打印出
可以注意到的一件事是出于某种原因,它们不是按照图片中在分析服务器上的顺序打印出来的……我不知道为什么会这样
这是此命令打印出的内容:
Analysis_Server.Databases[0]
既然索引 0 起作用了,我们应该能够索引 [1], [2]
,等等...
所以下面
Analysis_Server.Databases[1]
Analysis_Server.Databases[2]
打印:
现在连接字符串:
$Analysis_Server.Databases[0].DataSources[0].ConnectionString
打印出:
Connection Timeout=60;User Id=someID;Data Source=10.10.10.10;Persist Security Info=True
它似乎是 Database8 的连接字符串
太棒了,那么我们也应该能够做到这一点:
$Analysis_Server.Databases[1].DataSources[0].ConnectionString
但是,没有打印任何内容!似乎打印的唯一索引是 Databases[0]
这是 $Analysis_Server.Databases[0].DataSources[0]
打印的内容:
我们应该能够对所有数据库执行相同的操作
$Analysis_Server.Databases[1].DataSources[0]
$Analysis_Server.Databases[2].DataSources[0]
等..
但没有打印任何内容!
在此处的 post 中找到:http://www.mrtsql.com/2011/03/powershell-updating-analysis-services.html
看看那个 post 中的这个函数是否能帮助你。
function UpdateDataSources()
{
# Lets get our server name
$SSASServerName="$env:ComputerName\" + $SSASInstanceName
$MyConnection = New-Object("Microsoft.AnalysisServices.Server")
$MyConnection.Connect($SSASServerName)
# lets return the number of data sources
[int]$DataSourcecount=$MyConnection.Databases[$DatabaseName].DataSources.count
for ($count=0; $count -ne $DataSourcecount;++$count)
{
$MyCS=$MyConnection.Databases[$DatabaseName].DataSources[$count].ConnectionString
$NewCS=setNewValue -MyCS $MyCS -Pattern "Data Source=" -ReplaceWith $DataSourceServer
if ($PW.Length -ne 0)
{
$NewCS=setNewValue -MyCS $NewCS -Pattern "Password=" -ReplaceWith $PW
}
if ($UserName.length -ne 0)
{
$NewCS=setNewValue -MyCS $NewCS -Pattern "User ID=" -ReplaceWith $UserName
}
$MyConnection.Databases[$DatabaseName].DataSources[$count].ConnectionString=$NewCS
# write the change back to SSAS
$MyConnection.Databases[$DatabaseName].DataSources[$count].update()
write-output $NewCS
}
}
并不是说我有一个答案给你,但我认为你可以使用另一种方法来获得你需要的东西,同时等待微软的支持。
我正在开发 AX 2012 演示系统,即 运行 SQL Server 2014。它在同一个实例中有多个 olap 数据库。我已经编辑了所有数据源以指向不同的数据库,以表明我们得到了正确的细节。
我在测试时安装了最新的 SQL Server PowerShell 模块。
Install-Module SqlServer -Force -Confirm:$false
Import-Module SqlServer
现在您应该有一个新的 PowerShell 提供程序,它使您能够像文件系统一样遍历 SQL 服务器
Get-PSProvider
Name Capabilities Drives
---- ------------ ------
Registry ShouldProcess, Transactions {HKLM, HKCU}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess, Credentials {C, E, A, D...}
Function ShouldProcess {Function}
Variable ShouldProcess {Variable}
SqlServer Credentials {SQLSERVER}
Certificate ShouldProcess {Cert}
WSMan Credentials {WSMan}
有了我们的帮助,您应该能够执行以下操作,这应该会产生正确的结果
#Connect to the SSAS part of the sql server
PS C:\Users\Administrator> cd SQLSERVER:\SQLAS
#List all local instances
PS SQLSERVER:\SQLAS> dir
Host Name
---------
AX2012R2A
HTTP_DS
#Connect to the server (local) - you should be able to type in a valid network name
PS SQLSERVER:\SQLAS> cd AX2012R2A
#List all instances on that server
PS SQLSERVER:\SQLAS\AX2012R2A> dir
Instance Name
-------------
DEFAULT
POWERPIVOT
TABULAR
#Connect to the default instance on the server you are connected to
PS SQLSERVER:\SQLAS\AX2012R2A> cd default
#List all available collections / areas
PS SQLSERVER:\SQLAS\AX2012R2A\default> dir
#Connect to the databases area
PS SQLSERVER:\SQLAS\AX2012R2A\default> cd databases
#List all databases that are available
PS SQLSERVER:\SQLAS\AX2012R2A\default\databases> dir
Name State Read-Write Mode
---- ----- ---------------
Demand Forecast Accuracy initial Processed ReadWrite
Demand Forecast Accuracy ps Processed ReadWrite
Demand Forecast initial Processed ReadWrite
Demand Forecast ps Processed ReadWrite
Dynamics AX initial Processed ReadWrite
Dynamics AX ps Processed ReadWrite
#Getting the same result with Get-ChildItem
PS SQLSERVER:\SQLAS\AX2012R2A\default\databases> Get-ChildItem
Name State Read-Write Mode
---- ----- ---------------
Demand Forecast Accuracy initial Processed ReadWrite
Demand Forecast Accuracy ps Processed ReadWrite
Demand Forecast initial Processed ReadWrite
Demand Forecast ps Processed ReadWrite
Dynamics AX initial Processed ReadWrite
Dynamics AX ps Processed ReadWrite
#Traverse all databases and show their connection string details
PS SQLSERVER:\SQLAS\AX2012R2A\default\databases> Get-ChildItem | ForEach-Object {$_.Datasources}
Name Isolation Max Connections Connection String
---- --------- --------------- -----------------
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_1
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_2
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=MicrosoftDynamicsAX
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_4
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_5
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_6
PS SQLSERVER:\sqlas\ax2012r2A\default\databases> Get-ChildItem | ForEach-Object {$_.Datasources | ForEach-Object {$_.Connectionstring}}
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_1
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_2
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_3
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_4
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_5
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_6
我想说这应该能让您继续,因为您现在可以相信您拥有正确的连接字符串详细信息。我与您的其他问题相关 - 这应该为您提供要生成的更改脚本的所有详细信息,因此您可以按照 SQL 服务器对您的期望提供整个更改语句。
我只是稍微尝试了一下,以确保我理解您所面临的问题。在同一个盒子上,仍然加载了最新的可用 SqlServer PowerShell 模块 - 我得到了这些结果。
PS C:\Users\Administrator> $Analysis_Server = New-Object Microsoft.AnalysisServices.Server
PS C:\Users\Administrator> $Analysis_Server.connect("AX2012R2A")
PS C:\Users\Administrator> $Analysis_Server.Databases
Name State Read-Write Mode
---- ----- ---------------
Demand Forecast ps Processed ReadWrite
Demand Forecast Accuracy ps Processed ReadWrite
Demand Forecast Accuracy initial Processed ReadWrite
Dynamics AX ps Processed ReadWrite
Demand Forecast initial Processed ReadWrite
Dynamics AX initial Processed ReadWrite
现在我遍历每个数据库及其数据源,以显示连接字符串
PS C:\Users\Administrator> $Analysis_Server.Databases | ForEach-Object {$_.datasources}
Name Isolation Max Connections Connection String
---- --------- --------------- -----------------
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_4
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_2
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_1
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_6
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_3
Dynamics Database ReadCommitted 10 Provider=SQLNCLI11.1;Data
Source=AX2012R2A;Integrated
Security=SSPI;Initial
Catalog=DatabaseName_5
单行代码只提供连接字符串,仅提供连接字符串
PS C:\Users\Administrator> $Analysis_Server.Databases | ForEach-Object {$_.datasources | ForEach-Object {$_.ConnectionSt
ring}}
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_4
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_2
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_1
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_6
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_3
Provider=SQLNCLI11.1;Data Source=AX2012R2A;Integrated Security=SSPI;Initial Catalog=DatabaseName_5
您能否花点时间尝试安装最新的 SqlServer PowerShell 模块,看看这对您和您面临的问题是否有帮助?