用于多台服务器的 Powershell For Loop - 获取 SSAS 连接字符串详细信息

时间:2021-07-16 15:46:53

标签: powershell ssas

我对 powershell 脚本很陌生。我正在尝试获取多个服务器的 SSAS 表格模型连接字符串详细信息。我有只为单个服务器返回的代码。如何修改代码让多台服务器通过?

$servername = "servername1"  
# Connect SSAS Server
$server = New-Object Microsoft.AnalysisServices.Server
$server.connect($servername)
$DSTable = @();
foreach ( $db in $server.databases) 
{
    $dbname = $db.Name
    $Srver =  $db.ParentServer   
    foreach ( $ds in $db.Model.DataSources)
    {
        $hash = @
        {
            "Server" = $Srver;
            "Model_Name" =  $dbname ;
            "Datasource_Name" =  $ds.Name ;
            "ConnectionString" =  $ds.ConnectionString ;  
            "ImpersonationMode" = $ds.ImpersonationMode;
             "Impersonation_Account" = $ds.Account;
        }
        $row = New-Object psobject -Property $hash
        $DSTable += $row
    }
}

1 个答案:

答案 0 :(得分:0)

正如所评论的,您可以将您拥有的代码括在另一个 foreach 循环中。
使用带有 += 的数组连接是一个坏主意,因为每次添加时,整个数组都需要在内存中重新创建,因此既耗时又耗内存。

最好的办法是让 PowerShell 完成收集数据的繁重工作:

$allServers = 'server01','server02','server03'  # etc. an array of servernames
# loop through the servers array and collect the utput in variable $result
$result = foreach($servername in $allServers) { 
    # Connect SSAS Server
    $server = New-Object Microsoft.AnalysisServices.Server
    $server.Connect($servername)
    foreach ( $db in $server.databases) {
        foreach ( $ds in $db.Model.DataSources) {
            # output an object with the desired properties
            [PsCustomObject]@{
                Server                = $db.ParentServer
                Model_Name            = $db.Name
                Datasource_Name       = $ds.Name
                ConnectionString      = $ds.ConnectionString
                ImpersonationMode     = $ds.ImpersonationMode
                Impersonation_Account = $ds.Account
            }
        }
    }
}

# output on screen
$result | Out-GridView -Title 'SSAS connection string details'

# output to a CSV file  (change the path and filename here of course..)
$result | Export-Csv -Path 'D:\Test\MySSAS_Connections.csv' -UseCulture -NoTypeInformation

以上使用参数-UseCulture,因为用于CSV文件的分隔符与您的机器在Excel中双击和打开时所期望的相同。如果没有,则使用默认逗号

相关问题