我有一个SSAS多维数据集托管在X服务器上,上面有Y立方体。 如何使用Powershell了解Cube.VIZ的某些状态 状态 :-在线 , 最后处理日期
至少有四种方法可以做到这一点:
PowerShell 提供商
安装SqlServer
模块并使用提供程序:
# Install-Module SqlServer
dir sqlserver:sqlas$ServerNamedefaultDatabases*Cubes* | Select Select Name, LastProcessed
我不喜欢这个选项,因为它需要一个有效的 WMI 连接。这通常在生产服务器上设置防火墙。但如果它有效,它就不能为了方便而被击败。
嗡嗡
使用 SQL Server 管理对象:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices") | Out-Null
$server = New-Object Microsoft.AnalysisServices.Server
$server.Connect($ServerName)
$server.Databases.Cubes | Select Name, LastProcessed
$server.Dispose()
SMO 在工作时很方便,但取决于您的操作,它可能有点慢。
XMLA
元数据发现也可以使用 XMLA 完成。这会占用 XML 而不是方便的对象模型,因此它不像 SMO 那么容易,但在某些情况下可能会更快。但是,该模型并不直观。
# Install-Module SqlServer
$query = @'
<Statement>SELECT cube_name, last_schema_update FROM $system.mdschema_cubes WHERE cube_source = 1</Statement>
'@
$result = [xml] (Invoke-ASCmd -Server $server -Query $query)
$result.return.root.row | select cube_name, last_schema_update
阿多姆德
这是介于 SMO 和直接发布 XMLA 之间的中间位置。您可能需要单独下载 (SQL_AS_ADOMD.msi)。
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices.AdomdClient") | Out-Null
$connection = New-Object Microsoft.AnalysisServices.AdomdClient.AdomdConnection "Data Source=$server;Catalog=$database"
$connection.Open()
$connection.Cubes.Where{ $_.Type -eq 'Cube' } | Select Name, LastProcessed
这对于纯.NET应用程序比PowerShell更有趣,因为它并不比其他方法更快或更方便(并且需要下载)。我提到它是为了完整。