Powershell DSC, каков контекст выполнения для текущей конфигурации?

Я пытаюсь развернуть профиль powershell через DSC. Конфигурация должна скопировать файл .ps1 из общего сетевого ресурса в локальный путь.

Запуск скрипта завершается со следующей ошибкой SourcePath должен быть доступен для текущей конфигурации, хотя этот путь доступен из консоли, так какой пользователь/контекст используется во время настройки dsc?

Вот сценарий


Изменить после ответа @ravikanth


$ConfigurationData = @{
AllNodes = @(
    @{
        NodeName="*"
        PSDscAllowPlainTextPassword=$true
     }
    )
}
Configuration MyProfile
{ 
  param ([string[]]$MachineName,
        [PSCredential]$Credential)

  Node $MachineName
  {
    Log startconfig
    {
        # The message below gets written to the Microsoft-Windows-Desired State Configuration/Analytic log
        Message = "starting the file resource with ID MyProfile with $($myinvocation.mycommand) user : $env:username"
    }
    File profile
    {
      Credential=$credential
      Ensure = 'Present'   
      SourcePath = "\\web-mridf\powershell\profil_1.ps1"
      DestinationPath = "c:\temp\test.txt"  
      Type = "File" # Default is "File".
      DependsOn = "[Log]startconfig"      
    }

     Log AfterDirectoryCopy
     {
        # The message below gets written to the Microsoft-Windows-Desired State Configuration/Analytic log
        Message = "Finished running the file resource with ID MyProfile"
        DependsOn = "[File]profile" # This means run "MyProfile" first.
     }
  }
}

MyProfile -MachineName web-mridf -OutputPath c:\temp\dsc
Start-DscConfiguration -Path c:\temp\dsc -credential (get-credential("DOMAIN\user")) -force -verbose -Wait 

И получена ошибка ( неверный аргумент)

PS C:\temp> .\dsc.ps1


    Répertoire : C:\temp\dsc


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        04/06/2014     10:54       2834 web-mridf.mof
COMMENTAIRES : Effectuez l'opération « Invoquer une méthode CIM » avec les
paramètres suivants : « 'methodName' = SendConfigurationApply,'className' =
MSFT_DSCLocalConfigurationManager,'namespaceName' =
root/Microsoft/Windows/DesiredStateConfiguration ».

COMMENTAIRES : [WEB-MRIDF] :                            [[File]profile]
SourcePath must be accessible for current configuration.
COMMENTAIRES : [WEB-MRIDF] :                            [[File]profile] The
related file/directory is: \\web-mridf\powershell\profil_1.ps1.
SourcePath must be accessible for current configuration. The related
file/directory is: \\web-mridf\powershell\profil_smac.ps1. . L'ID de ressource
associé est [File]profile.
    + CategoryInfo          : InvalidArgument : (:) [], CimException
    + FullyQualifiedErrorId : MI RESULT 4
    + PSComputerName        : web-mridf

COMMENTAIRES : [WEB-MRIDF] : Gestionnaire de configuration local :  [ Fin
Définir  ]
La fonction SendConfigurationApply n'a pas réussi.
    + CategoryInfo          : InvalidArgument : (root/Microsoft/...gurationMan
   ager:String) [], CimException
    + FullyQualifiedErrorId : MI RESULT 4
    + PSComputerName        : web-mridf

COMMENTAIRES : L'opération « Invoquer une méthode CIM » est terminée.
COMMENTAIRES : Le temps nécessaire à l'exécution du travail de configuration
est de 0.881 secondes

person Loïc MICHEL    schedule 04.06.2014    source источник


Ответы (1)


Диспетчер локальной конфигурации DSC работает как SYSTEM. Таким образом, у него не будет доступа к общему ресурсу. Вам необходимо передать учетные данные для доступа к общему ресурсу. Для учетных данных вам необходимо либо использовать сертификаты для шифрования пароля, либо использовать обычный текстовый пароль.

Пароль в виде простого текста можно найти в статье, которую я разместил в журнале PowerShell. http://www.powershellmagazine.com/2013/09/26/using-the-credential-attribute-of-dsc-file-resource/

Если вы хотите использовать сертификаты для шифрования паролей, ознакомьтесь с записью блога PS Team по адресу http://blogs.msdn.com/b/powershell/archive/2014/01/31/want-to-secure.-credentials-in-windows-powershell-желаемое-состояние-configuration.aspx

Обновление на основе комментариев ниже:

$AllNodes.Nodename является ключом при использовании данных конфигурации. Не заменяйте его статическим именем узла.

$ConfigurationData = @{
    AllNodes = @(
        @{
            NodeName="*"
            PSDscAllowPlainTextPassword=$true
         }
        @{
            NodeName="ServerName"
         }
    )
}

Configuration MyProfile 
{ 
    param (
        [PSCredential]$Credential
    ) 

    Node $AllNodes.NodeName
    { 
        Log startconfig 
        { 
            # The message below gets written to the Microsoft-Windows-Desired State Configuration/Analytic log 
            Message = "starting the file resource with ID MyProfile with $($myinvocation.mycommand) user : $env:username" 
        } 
        File profile 
        { 
            Credential=$credential 
            Ensure = 'Present' 
            SourcePath = "e:\powershell\profil_smac.ps1" 
            DestinationPath = "c:\temp\test2.txt2" 
            Type = "File" # Default is "File". 
            DependsOn = "[Log]startconfig" 
        } 

        Log AfterDirectoryCopy 
        { 
            # The message below gets written to the Microsoft-Windows-Desired State Configuration/Analytic log 
            Message = "Finished running the file resource with ID MyProfile" 
            DependsOn = "[File]profile" # This means run "MyProfile" first. 
        } 
    } 
} 

MyProfile -configurationdata $configurationdata -machinename "web-mridf.groupe.sa.colas.com" -credential (get-credential("groupe\sys-mac-smacsr")) -OutputPath c:\temp\dsc 
Start-DscConfiguration -Path c:\temp\dsc -force -verbose -Wait
person ravikanth    schedule 04.06.2014
comment
Спасибо, Равикант, учетные данные, кажется, обработаны dsc, но все равно выдает ошибку. я обновляю свой вопрос - person Loïc MICHEL; 04.06.2014
comment
Отправка учетных данных в одиночку не работает. Где данные конфигурации? Вам нужно указать параметр -ConfigurationData с Start-DscConfiguration. Взгляните на ссылку PowerShell Magazine, которой я поделился, в качестве примера использования данных конфигурации. - person ravikanth; 04.06.2014
comment
извините, ошибка копирования/вставки, данные конфигурации присутствуют в моем скрипте - person Loïc MICHEL; 04.06.2014
comment
Ну что ж. вы добавили данные конфигурации, но не используете их! :) Обратитесь к примеру, который у меня есть в статье. Вам нужно передать имя узла через данные конфигурации. Кроме того, вы используете параметр учетных данных файла Start-DscConfiguration. Это не правильно. Вы должны передать учетные данные своей команде конфигурации, которой является MyProfile. Я обновил свой ответ. - person ravikanth; 04.06.2014
comment
Еще раз спасибо, я вижу свою глупую ошибку ^^. Таким образом, нет возможности применить данные конфигурации ко всем хостам (nodename = *), как вы предложили в своем блоге, на случай, если я хочу передать несколько имен компьютеров? - person Loïc MICHEL; 04.06.2014
comment
Я думаю, DSC не для меня ... все еще есть ошибка SourcePath должна быть доступна - person Loïc MICHEL; 04.06.2014
comment
Вы можете применить его к нескольким системам. Все, что упоминается с NodeName, установленным на *, будет применяться ко всем узлам. Вам нужно добавить один хэш для каждого имени узла, которое вы хотите указать. - person ravikanth; 04.06.2014
comment
хорошо, я, должно быть, устал, теперь это нормально для nodename=* . Я отмечаю это как ответ, даже если я все еще сталкиваюсь с проблемой, я думаю, проблема сейчас в другом месте. Спасибо. - person Loïc MICHEL; 04.06.2014
comment
Давайте продолжим обсуждение в чате. - person Loïc MICHEL; 04.06.2014