Свойство ConnectionString не печатает строку подключения - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь получить строку подключения источника данных базы данных с помощью следующего сценария:

   $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)

ясно, что свойство Database работает.

------------- UPDATE : --------------

вот как базы данных выглядят на сервере

server1_Databses

вот что делает каждая из следующих строк:

   $Analysis_Server.Databases

это распечатывает

Databses

Одна вещь, которую можно заметить, это то, что по какой-то причине они распечатываются не в порядке их расположения на сервере анализа, как на рисунке ... Я не знаю, почему это так

это то, что выводит эта команда:

Analysis_Server.Databases[0]

Database8

Теперь, так как индекс 0 работал, мы должны иметь возможность индексировать [1], [2] и т. Д. *

поэтому следующий

Analysis_Server.Databases[1] 
Analysis_Server.Databases[2]

печать:

databases1 and 3

Теперь к строке подключения:

$Analysis_Server.Databases[0].DataSources[0].ConnectionString

, который печатает:

Тайм-аут соединения = 60; Идентификатор пользователя = someID; Источник данных = 10.10.10.10; Информация о постоянной безопасности = True

кажется, что это строка подключения для базы данных8

круто, так что тогда мы тоже сможем сделать это:

$Analysis_Server.Databases[1].DataSources[0].ConnectionString

Однако ничего не печатается! единственный индекс, который, кажется, печатает с Databases[0]

Вот что печатает $Analysis_Server.Databases[0].DataSources[0]:

DataSources0

мы должны быть в состоянии сделать то же самое для всех баз данных

$Analysis_Server.Databases[1].DataSources[0]

$Analysis_Server.Databases[2].DataSources[0] и т.д ..

но ничего не печатается!

Ответы [ 3 ]

0 голосов
/ 10 ноября 2018

Не говорю, что у меня есть для вас ответ, но я думаю, что вы можете использовать другой подход, чтобы получить то, что вам нужно, в ожидании поддержки Microsoft.

Я работаю над демонстрационной системой AX 2012, которая работает под управлением SQL Server 2014. Она имеет несколько баз данных olap внутри одного экземпляра. Я отредактировал все источники данных, чтобы указать на другую базу данных, чтобы показать, что мы получаем правильные данные.

Во время тестирования я установил последний модуль SQL Server PowerShell.

Install-Module SqlServer -Force -Confirm:$false
Import-Module SqlServer

Теперь у вас должен быть новый поставщик PowerShell, который позволяет вам обходить SQL Server, как если бы это была файловая система

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

Я бы сказал, что это должно помочь вам, потому что теперь вы можете верить, что у вас есть правильные данные строки подключения. Я касаюсь вашего другого вопроса - он должен дать вам все детали для сценария alter, который вы хотите создать, поэтому вы предоставляете весь оператор alter, как того требует SQL Server.

0 голосов
/ 10 ноября 2018

Я просто поиграл с вещами немного больше, чтобы убедиться, что я понял проблему, с которой вы сталкиваетесь. В том же окне, все еще с загруженным новейшим модулем 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 и посмотреть, имеет ли это какое-то значение для вас и проблемы, с которой вы столкнулись?

0 голосов
/ 30 октября 2018

нашел это в посте здесь: http://www.mrtsql.com/2011/03/powershell-updating-analysis-services.html

Посмотрите, поможет ли вам эта функция в этом посте.

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
     }
}
...