什么你不只是使用 SQLPS 模块或DBA 工具模块?
当然,您还可以利用其他模块:
Find-Module -Name '*sql*' | Format-Table -AutoSize
Find-Package -Name '*sql*' | Format-Table -AutoSize
这是我传递给其他使用 SQL 的人的东西。
安装 SQL Server PowerShell 模块
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 Server
作为概述,以下是我将在本文中介绍的选项列表:
- SQL Server PowerShell (SQLPS)
- SQL Server 管理对象 (SMO)
- .NET (System.Data.SqlClient)
SQLPS
SQL Server PowerShell SQLPS 是与 SQL Server 2008 一起首次发布的实用程序,您可能会看到以各种方式引用它。它作为 (1) 实用程序和 (2) 作为 PS 模块存在。该实用程序和模块随 SQL Server 2008 及更高版本的 SQL Server 管理工具一起安装。有几种使用此实用程序连接到 SQL Server 的方法,每种方法都有优点和缺点。
SQLPS.exe
这是一个实用程序,您应该可以通过在运行提示符(开始 > 运行)中键入它来打开它。第二个选项,右键单击 SQL Server Management Studio (SSMS) 中对象资源管理器下的节点,然后选择“启动 PowerShell”。SQLPS 实用程序的主要访问点是使用提供程序“SQLSERVER:\”像浏览文件目录一样浏览 SQL Server。这样,根据您打开 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]
最后:
使用 POWERSHELL 从 2016 TABULAR Cube 获取所有测量值
因此,这里的 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;