我在X服务器上托管了一个SSAS多维数据集,并在其上有Y Cube。 如何使用Powershell了解Cube.VIZ的某些状态 状态: - 在线,上次处理日期
答案 0 :(得分:1)
至少有四种方法:
安装SqlServer
模块并使用提供程序:
# Install-Module SqlServer
dir sqlserver:\sqlas\$ServerName\default\Databases\*\Cubes\* | Select Select Name, LastProcessed
我不是这个选项的粉丝,因为它需要一个有效的WMI连接。这通常是生产服务器上的防火墙。但如果它有效,它就不会被打败。
使用SQL Server Management Objects:
[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完成。这会咳出XML而不是方便的对象模型,所以它不像SMO那么容易,但它可能在更快的情况下。但是,model并不直观。
# 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之间的一半。您可能需要separate download(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更有趣,因为它不比其他方法更快或更方便(并且需要下载)。我提到它是完整的。