Скрипт Powershell для извлечения результатов DMV из табличной модели - PullRequest
2 голосов
/ 07 февраля 2020

Попытка создания сценария PowerShell для подключения к службам Analysis Services Табличная Моделирование и извлечение результатов DMV-запросов (например, SELECT * FROM $ System.DBSchema_Tables)

Пробовал ниже, но не удается, кажется, что-то не так со строкой подключения или способом, которым я пытаюсь подключиться:

$connectionString = "server=TabularServerName;database='ModelName';trusted_connection=true;";
$CubeQuery = "SELECT * FROM $System.DBSchema_Tables";

#SQL Connection - connection to SQL server
$sqlConnection = new-object System.Data.SqlClient.SqlConnection;
$sqlConnection.ConnectionString = $connectionString;

#SQL Command - set up the SQL call
$sqlCommand = New-Object System.Data.SqlClient.SqlCommand;
$sqlCommand.Connection = $sqlConnection;
$sqlCommand.CommandText = $CubeQuery;

#SQL Adapter - get the results using the SQL Command
$sqlAdapter = new-object System.Data.SqlClient.SqlDataAdapter 
$sqlAdapter.SelectCommand = $sqlCommand
$dataSet = new-object System.Data.Dataset
$recordCount = $sqlAdapter.Fill($dataSet)

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Что вы используете не только для модуля SQLPS или Модуль DBA Tools ?

Есть, конечно, другие модули, которые вы можете использовать:

Find-Module -Name '*sql*' | Format-Table -AutoSize
Find-Package -Name '*sql*' | Format-Table -AutoSize

Вот материал, который я передал другим, возиться с SQL.

Установить серверный модуль PowerShell SQL

https://docs.microsoft.com/en-us/sql/powershell/download-sql-server-ps-module?view=sql-server-ver15

https://docs.microsoft.com/en-us/powershell/module/sqlps/?view=sqlserver-ps

https://docs.microsoft.com/en-us/sql/powershell/sql-server-powershell?view=sql-server-ver15

Тогда см. :

Подключение PowerShell к SQL Серверу

В качестве обзора ниже приведен список параметров, которые я go опишу в этой статье:

  • SQL Сервер PowerShell (SQLPS)
  • SQL Объекты управления сервером (SMO)
  • . NET (System.Data.SqlClient)

SQLPS

SQL Сервер PowerShell SQLPS - это утилита, впервые выпущенная с SQL Server 2008, на которую вы можете ссылаться по-разному. Он существует как (1) утилита и (2) как модуль PS. Утилита и модуль устанавливаются вместе с SQL инструментами управления сервером, начиная с SQL Server 2008 и выше. Есть несколько способов подключения к SQL Серверу с помощью этой утилиты, и у каждого есть свои сильные и слабые стороны.

SQLPS.exe

Это утилита, которую вы сможете открыть. набрав его в командной строке (Пуск> Выполнить). Во втором варианте щелкните правой кнопкой мыши узел в Обозревателе объектов в SQL Server Management Studio (SSMS) и выберите «Запустить PowerShell». Основная точка доступа утилиты SQLPS использует провайдер «SQLSERVER: \» для поиска SQL Сервер как каталог файлов. При этом на основе узла, с которого вы открываете SQLPS, вы попадете в этот путь провайдера. В каждой «папке», в которой вы работаете, провайдер предлагает свойства для чтения или установки, а также некоторые методы для администрирования.

Get-ChildItem SQLSERVER:\SQL\LOCALHOST\SQL12\Databases | foreach { $_.RecoveryModel = "SIMPLE"; $_.Alter() }

Модуль SQLPS

Импорт модуль SQLPS в сеансе PS обеспечивает тот же доступ, что и утилита, но позволяет вам работать в той версии ОС PS, с которой вы работаете. В SQL Server 2008 и 2008 R2 вы будете загружать SQLPS как оснастку (Add-PSSnapin), затем с SQL Server 2012 и выше он импортируется (Import-Module).

# Loading SMO
Add-Type -AssemblyName "Microsoft.SqlServer.Smo,Version=11.0.0.0,Culture=neutral,PublicKeyToken=89845dcd8080cc91"

# Connecting with SMO
$srv = New-Object Microsoft.SqlServer.Management.Smo.Server “localhost\sql12”
$srv.Databases | select name

# .NET Framework
# Create a connection
$sqlConn = New-Object System.Data.SqlClient.SqlConnection
$sqlConn.ConnectionString = “Server=localhost\sql12;Integrated Security=true;Initial Catalog=master”
$sqlConn.Open()

# Create your command (the T-SQL that will be executed)
$sqlcmd = $sqlConn.CreateCommand()
<# or #>
$sqlcmd = New-Object System.Data.SqlClient.SqlCommand
$sqlcmd.Connection = $sqlConn
$query = “SELECT name, database_id FROM sys.databases”
$sqlcmd.CommandText = $query

# Create your data adapter (if you want to retrieve data)
$adp = New-Object System.Data.SqlClient.SqlDataAdapter $sqlcmd

# Create your dataset (the adapter fills this object)
$data = New-Object System.Data.DataSet
$adp.Fill($data) | Out-Null

# Retrieving Your Data
$data.Tables
<# or #>
$data.Tables[0]

Наконец:

ИСПОЛЬЗУЙТЕ ПОЛОЖЕНИЕ ДЛЯ ПОЛУЧЕНИЯ ВСЕХ ИЗМЕРЕНИЙ ИЗ ТУБУЛЬНОГО КУБА 2016 ГОДА

Итак, вот скрипт PowerShell, который получит меры из куба (измените первые три переменные в соответствии с вашей средой):

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices.Tabular");

$tab = "YourSSASserver";
$dbId = "ID_or_DB";
$saveas = "C:\YourFolder\{0}.dax" -f $tab.Replace('\', '_');


$as = New-Object Microsoft.AnalysisServices.Tabular.Server;
$as.Connect($tab);
$db = $as.Databases[$dbId];
# in case you want to search by the name of the cube/db:
# $as.Databases.GetByName("DB Name");

$out = "";

foreach($t in $db.Model.Tables) {
  foreach($M in $t.Measures) {
    $out += "// Measure defined in table [" + $t.Name + "] //" + "`n";
    $out += $M.Name + ":=" + $M.Expression + "`n";
  }
}

$as.Disconnect();
$out = $out.Replace("`t","  "); # I prefer spaces over tabs :-)
$out.TrimEnd() | Out-File $saveas; 
0 голосов
/ 18 апреля 2020

Вот что у меня сработало

$connectionString =  $connectionString = “Provider=MSOLAP;Data Source=TabularServerName;” 
$CubeQuery = 'SELECT * FROM $System.DBSchema_Tables';

$connection = New-Object -TypeName System.Data.OleDb.OleDbConnection

$connection.ConnectionString = $connectionString
$sqlCommand = $connection.CreateCommand() 

$sqlCommand.CommandText = $CubeQuery;

#SQL Adapter - get the results using the SQL Command
$sqlAdapter = new-object System.Data.SqlClient.SqlDataAdapter 
$sqlAdapter.SelectCommand = $sqlCommand
$dataSet = new-object System.Data.Dataset
$recordCount = $sqlAdapter.Fill($dataSet)```
...