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

Powershell For Loop for multiple servers - to get SSAS connection string details

我对 powershell 脚本还很陌生。我正在尝试获取多个服务器的 SSAS 表格模型连接字符串详细信息。我的代码 return 仅适用于单个服务器。如何修改代码以通过多个服务器?

$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
    }
}

如评论所述,您可以将您的代码包围在另一个 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 开幕。没有它,使用默认逗号