<

SSAS: Automating SQL Server Agent service logon as administrator

Published on
3,704 Points
704 Views
Last Modified:
Dorababu M
8  years of experience in IT. Working as senior software engineer in OTSI, Hyderabad.
Recently we ran in to an issue while running some SQL jobs where we were trying to process the cubes.  We got an error saying failure stating 'NT SERVICE\SQLSERVERAGENT does not have access to Analysis Services. So this is a way to automate that with a PowerShell script.

Connect to your specific SQL analysis instance and go through properties to security.


You should see that there is no Service Agent in the list of Server Administrators. 

Figure 1 - Before


After executing my PowerShell script (below), the agent has been added.


Figure 2 - After script


The following PowerShell function will get the SQL service logon name associated with the specified computer and will add that user to the Analysis Server administrator group.


Function Add-SqlServiceLogonAccount
{
    [CmdletBinding()]
    param
    (
    [parameter(Mandatory=$true)]
    [string] $SqlServerInstance = $env:computername,
    [parameter(Mandatory=$true)]
    [string]  $AnalysisServerInstance,
    $ComputerName = $env:computername
    )
    
    try
    {
        $ValidAnalysis = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")         | Out-String
        if([string]::IsNullOrWhitespace($ValidAnalysis))
        {
            throw "Unable to find either Microsoft.AnalysisServices.AdomdClient or Microsoft.AnalysisServices in GAC"
        }

        $SqlInstance =  $SqlServerInstance.Split("\")
#Getting the required SQL services running for both default localhost and as well for new Instances
        if($SqlServerInstance -match "\\")
        {
            $SqlInstance = "SQLAgent`$$($SqlInstance[1])"
        }
        else
        {
            $SqlInstance = "SQLSERVERAGENT"
            $SqlServiceDetails = Get-WmiObject -Class Win32_Service -ComputerName $ComputerName |
            select name,DisplayName, StartName, State |
            Where {$_.name -eq "$SqlInstance"  -and $_.State -eq "Running" }
        }
        [string]$loginName = [string]::Empty
        if($SqlServiceDetails -ne $null)
        {
            if($SqlServiceDetails.Name -eq $SqlInstance)
            {
                $loginName = $SqlServiceDetails.StartName
            }
        }
        if(![string]::IsNullOrWhitespace($loginName))
        {
            $Targetserver = new-Object Microsoft.AnalysisServices.Server
            $Targetserver.Connect($AnalysisServerInstance)
            #Getting members under the role Administrators
            $administrators = $Targetserver.Roles["Administrators"]
        #checking for the existence of loginname, if not exists adding member to Administrators group
            if ($administrators.Members.Name -notcontains $loginName) 
            {
                Write-Host "Adding the agent logon account $loginName to the Administrators group"
                $administrators.Members.Add($loginName) | Out-Null
                $administrators.Update()
                Write-Host "Adding the agent logon account $loginName to the Administrators group"
            }
            else
            {
                Write-Verbose "$loginName was already added to the Administrators group"
            }
            $Targetserver.Disconnect()
       }
    }
    catch
    {
    throw $_.Message
    }
}


Here are some examples of the above script in use.  Check the instance after running to ensure the user has been added correctly (as indicated in Figure 2 above)


Example 1 - Default SQL and Analysis instance

Add-SqlServiceLogonAccount -SqlServerInstance "localhost" -AnalysisServerInstance "localhost"


Example 2 - Named SQL and Analysis instance

Add-SqlServiceLogonAccount -SqlServerInstance "pc-name\local" -AnalysisServerInstance "pc-name\local"


0
Comment
Author:Dorababu M
0 Comments

Featured Post

Creating Active Directory Users from a Text File

If your organization has a need to mass-create AD user accounts, watch this video to see how its done without the need for scripting or other unnecessary complexities.

Join & Write a Comment

Via a live example, show how to shrink a transaction log file down to a reasonable size.
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.

Keep in touch with Experts Exchange

Tech news and trends delivered to your inbox every month