powershell4ssas笔记

浏览: 2462

连接SSAS方法1,通过ADOMD.NET

#import dll

add-type -path "Microsoft.AnalysisServices.AdomdClient.dll"

 

#create connection

$c=new-object Microsoft.AnalysisServices.AdomdClient.AdomdConnection

$c.ConnectionString="Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Adventure Works DW 2008;Data Source=localhost"

$c.Open()

foreach ($cube in $c.Cubes)

{

if ($cube.Type -eq [CubeType]::Cube)

write-host $cubes

}

关键点:

Add-Type:相当于在c#中添加一个dll进来。

New-Object:声明一个.net对象

-eq相当于c#的==

 

 

连接SSAS方法2,通过AMO连接,并且备份cube

$s=[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")

$server=New-Object Microsoft.AnalysisServices.Server

$server.connect("Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Adventure Works DW 2008;Data Source=.")

$db=$server.databases.item("Adventure Works DW 2008")

$db.backup("d:\mmm.abf")

第一行,声明一个.net对象的另一种方法。

备份直接在Database对象上操作就可以。

 

 

Process cube

[System.reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")

[Microsoft.AnalysisServices.Server]$svr = new-Object Microsoft.AnalysisServices.Server

$svr.Connect("Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=Adventure Works DW 2008;Data Source=localhost")

#define error configuration

$svr.CaptureXml=$true

[Microsoft.AnalysisServices.Database] $_db=$svr.Databases.FindByName("Adventure Works DW 2008")

$_db.Cubes.FindByName("Adventure Works").Process()

$_db.Process()

$svr.CaptureXml=$false

#write out XMLA

foreach ($v in $svr.CaptureLog)

{

    write-output $v

}

#begin to process

[Microsoft.AnalysisServices.XmlaResultCollection] $_result = $svr.ExecuteCaptureLog($true,$true)

write-output "Process Waring and errors:"

foreach ($r in $_result)

{

    foreach ($m in $r.Messages)

    {

        write-output "$m.Description"

    }

}

关键点:

每一个ssas object都有一个process方法,而且都需要套在$svr.CaptureXml=$true和$svr.CaptureXml=$false中间,process方法后的object会生成相应的xmla对象用来处理cube。

Xmla是放在Server对象中的,CaptureLog是一个行集需要枚举读取出来Capture的xmla是什么样的。

Server的ExecuteCaptureLog方法真正处理生成的xmla,结果是一个XmlaResultCollection对象。里面有cube的处理记录,跟手动在项目里处理cube的差不多,不过是同步的,没有找到异步方法。

 

推荐 0
本文由 哥本哈士奇 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册