PowerShell DSC. Учетные записи

Про использование учетных записей в PowerShell Desired State Configuration.

PowerShell Desired State Configuration Credentials

PowerShell Desired State Configuration Credentials

При попытке скомпилировать файл конфигурации в PowerShell DSC, использующий учетные записи, первый получаемый результат - ошибка:

Converting and storing encrypted passwords as plain text is not recommended. For more information on securing credentials in MOF file, please refer to MSDN blog: http://go.microsoft.com/fwlink/?LinkId=393729

И предупреждение в случае использования доменных учетных записей:

WARNING: It is not recommended to use domain credential for node 'NODENAME'. In order to suppress the warning, you can add a property named 'PSDscAllowDomainUser' with a value of $true to your DSC configuration data for node 'NODENAME'.

Посмотрим как можно и как правильно скомпилировать mof-файл в этом случае. Для примера возьмем следующую конфигурацию:

Configuration MyCustomConfiguration {
    param(
        [Parameter(Mandatory=$true)]
        [ValidateNotNullorEmpty()]
        [PSCredential]
        $Account
    )
 
    Node localhost
    {
    #DSC resource using $Account
    }
}

Компиляция его, которая порождает выше описанные ошибки:

MyCustomConfiguration -Account (Get-Credential)

ConfigurationData

Чтобы разрешить проблему компиляцию необходимо дополнить параметром ConfigurationData.

Способ 1. Неправильный

Самый простой способ - разрешить хранение пароля в открытом виде. Примерно так:

$ConfigData = @{
    AllNodes = @(
        @{
            NodeName = 'localhost'
            PSDscAllowPlainTextPassword = $true
            PsDscAllowDomainUser = $true
        }
    )
}
 
MyCustomConfiguration -Account (Get-Credential) -ConfigurationData $ConfigData

Параметр PSDscAllowPlainTextPassword разрешает хранить пароль в открытом виде, а PsDscAllowDomainUser - использование доменных учетных записей.

Учетные данные (логин/пароль) будут записаны в mof-файл примерно в таком виде:

instance of MSFT_Credential as $MSFT_Credential1ref
{
 Password = "P@ssw0rd";
 UserName = "domain\\admin";
};

Т.е. делать так нельзя даже если очень надо.

Способ 2. Правильный

В PowerShell DSC есть возможность зашифровать пароль с помощью сертификата. В этом случае конфигурация будет примерно такой:

$ConfigData = @{
    AllNodes = @(
        @{
            NodeName = 'SP2016SRV'
            CertificateFile = 'C:\sp\localhost.cer'
            Thumbprint = '‎35024c5060014373e768b900b762f6793c5575d9'
            PSDscAllowDomainUser = $true
        }
    )
}

После компиляции mof-файл не будет содержать пароль в открытом виде:

instance of MSFT_Credential as $MSFT_Credential1ref
{
 Password = "-----BEGIN CMS-----\...\n-----END CMS-----";
 UserName = "domain\\admin";
};

Пользуемся.

Виталий Жуков

Виталий Жуков

SharePoint архитектор, разработчик, тренер, Microsoft MVP (Office Development). Более 15 лет опыта работы с SharePoint, Dynamics CRM, Office 365, и другими продуктами и сервисами Microsoft.

Смотрите также

SharePoint 2007. Проверка на наличие элемента в списке

SharePoint 2007. Проверка на наличие элемента в списке

SharePoint 2007. База данных содержимого

SharePoint 2007. База данных содержимого

SharePoint 2007. Свой контрол на панели свойств веб-парта

SharePoint 2007. Свой контрол на панели свойств веб-парта

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Получение данных из нескольких списков и узлов

SharePoint 2007. Получение данных из нескольких списков и узлов