Определение типа конфигурации ADFS 2.0 через PowerShell

ADFS 2.0 может быть настроен со следующим режимом Автономный, Ферма, SQLFarm.

Как часть диагностического рабочего процесса, мне нужно проверить это. Команда Get-ADFSConfiguration предоставляет огромное количество информации; однако, нет явного свойства относительно типа конфигурации. После дальнейшего расследования, тип Standlalone, Farm, SQLFarm на самом деле ссылаются на XML-файлы в каталоге ADFS.

Каков наилучший способ определения типа конфигурации ADFS 2.0 с помощью powershell?

2 ответа

Решение

Предположение неверно. Не используйте этот код. См. https://social.msdn.microsoft.com/Forums/sqlserver/en-US/7d5dee92-53ca-4cc5-bd02-d30833c4b94b/is-my-existing-adfs-a-standalone-or-a-single-server-farm-topology?forum=Geneva

Вам нужно проверить, какая учетная запись входа в систему используется, а затем, если это не сетевая служба, она находится в режиме фермы, и вы можете проверить соединение с артефактом.

Вот что я использую вместо этого...

Function Get-ADFSConfigurationType
{
if ((Test-CommandExists "Get-ADFSConfiguration") -ne $true)
{
    return 'Not Installed'
}

# get the localized form of 'NT AUTHORITY\NETWORK SERVICE'
$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-20") # NT AUTHORITY\NETWORK SERVICE
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount]) 
$networkserviceLocalizedName = $objUser.Value 

$adfsServiceLogonName = (Get-WmiObject -ComputerName '.' Win32_Service | where {$_.Name -eq 'adfssrv'} | Select StartName).StartName

if ($adfsServiceLogonName -eq $networkserviceLocalizedName)
{
    # ADFS is configured in standalone mode if it is running under NT AUTHORITY\NETWORK SERVICE
    return 'Standalone';
}

if ($adfsServiceLogonName -eq 'LocalSystem')
{
    # ADFS should not be run under Local System
    # 'LocalSystem' is the same across all locales
    return 'Error ADFSSRV Logon is LocalSystem';
}

try
{
    $conf = Get-ADFSConfiguration;
}
catch
{
    return 'Error Calling Get-ADFSConfiguration'
}

if ( $conf.ArtifactDbConnection -like "*\\.\pipe\*" )
{
    # ADFS uses a Windows Internal Database, it's a Farm configuration
    return 'Farm';
}
else
{
    # ADFS is configured for SQLFarm
    return 'SQLFarm';
}    
}

Обновлено: это наивное решение. Пожалуйста, следуйте утвержденному ответу.

Function Get-ADFSConfigurationType
{
    $conf = Get-ADFSConfiguration;

    if ( $conf.CertificateSharingContainer -eq $null )
    {
        # ADFS is configured in standalone mode.
        return 'Standalone';
    }

    if ( $conf.ArtifactDbConnection -like "*\\.\pipe\*" )
    {
        # ADFS uses a Windows Internal Database, it's a Farm configuration
        return 'Farm';
    }
    else
    {
        # ADFS is configured for SQLFarm
        return 'SQLFarm';
    }   
}
Другие вопросы по тегам