Copie PowerShell DSC à partir du partage réseau

17

J'essaie d'utiliser PowerShell DSC pour copier le contenu du dossier à partir d'un partage réseau. Voici le code:

Configuration TestSetup {
    Node localhost {
        File Test {
            SourcePath = "\\Server\SomeShare\SomeFolder"
            DestinationPath = "E:\test"
            Recurse = $true
            Type = "Directory"
        }
    }
}

Cela ne fonctionne pas cependant - lorsque je l'exécute, j'obtiens le message d'erreur suivant:

The related file/directory is: \\Server\SomeShare\SomeFolder.
The path cannot point to the root directory or to the root of a net share.
SourcePath must be specified if you want to configure the destination directory recursively. Make sure that SourcePath is a directory and that it is accessible.
    + CategoryInfo          : InvalidArgument: (:) [], CimException
    + FullyQualifiedErrorId : MI RESULT 4
    + PSComputerName        : localhost

The SendConfigurationApply function did not succeed.
    + CategoryInfo          : InvalidArgument: (root/Microsoft/...gurationManager:String) [], CimException
    + FullyQualifiedErrorId : MI RESULT 4
    + PSComputerName        : localhost

J'obtiens des résultats similaires lorsque j'essaie d'installer un package à partir d'un partage réseau ou d'extraire une archive à partir d'un partage réseau. J'exécute PowerShell 4 sur Windows Server 2008 R2 SP1.

Existe-t-il un moyen d'utiliser PowerShell DSC avec des partages réseau?

Richard
la source
Une solution n'est-elle pas décrite dans ce lien? powershellmagazine.com/2013/09/02/…
ErikE
Merci de m'avoir indiqué dans la bonne direction. Cela ne m'a pas tout à fait réussi car le partage était sur la même machine et j'ai donc dû accorder des autorisations au compte SYSTEM. Si vous voulez mettre une réponse en pointant sur ce lien, je vous attribuerai la prime.
Richard

Réponses:

14

Le DSC Local Configuration Manager s'exécute en tant que compte SYSTEM local, pas votre compte utilisateur. Il ne pourra donc pas accéder aux ressources du réseau à moins de disposer d'autorisations explicites.

Il y a deux situations possibles. Soit le partage se trouve sur la même machine que celle à laquelle la configuration DSC est appliquée (appelons cette machine A), soit le partage se trouve sur une autre machine (appelons cette machine B).

Si le partage se trouve sur la machine A, les autorisations de lecture doivent être accordées à l'utilisateur SYSTEM. Par exemple:

net share SomeShare=C:\SomeShare /GRANT:"NT AUTHORITY\SYSTEM",READ

Si le partage se trouve sur la machine B, les autorisations de lecture doivent être accordées au compte d'ordinateur de la machine A. Par exemple:

net share SomeShare=C:\SomeShare /GRANT:DOMAIN\MachineA$,READ

Source: http://www.powershellmagazine.com/2013/09/02/copying-powershell-modules-and-custom-dsc-resources-using-dsc/

Richard
la source
5

Le DSCs'exécute localhostafin d'appliquer la configuration. Cela signifie que les DSCfichiers de ressources doivent être distribués sur chaque machine à configurer DSC.

La gestion des autorisations est donc cruciale lors de la copie des fichiers DSC à partir d'un partage.

DSCs'exécute sous le NT AUTHORITY\SYSTEMcompte et sauf si l' Credentialattribut a été défini, le Computer accountest utilisé lors de l'extraction des fichiers d'un partage réseau.

Par conséquent et selon d'où les fichiers sont extraits, le SYSTEMcompte doit se voir accorder des readautorisations sur un partage local et la Computer accountnécessité de se voir accorder des readautorisations sur un partage distant.

Ceci est concrètement détaillé dans la réponse de Richards, qui étend la syntaxe sur la source du blog d'origine pour cette information.

ErikE
la source
0

Je n'ai pas le temps pour le moment d'approfondir cette question, mais il semble qu'il soit possible de transmettre en toute sécurité les informations d'identification à utiliser par le gestionnaire de configuration local. En fait, dans le blog, son exemple utilise la ressource File pour extraire des fichiers d'un partage réseau. J'espère essayer cela bientôt, puis revenir pour mieux étoffer cette réponse.

Blog TechNet: vous souhaitez sécuriser les informations d'identification dans la configuration de l'état souhaité de Windows PowerShell? - par Travis Plunk

Nathan Hartley
la source
-2

Powershell est presque aussi stupide que l'ancien shell cmd. Il a toujours un support très limité pour les chemins UNC. Dans cet esprit ... avez-vous essayé d'aliaser le chemin UNC? c'est à dire

New-PSDrive -Name UNCPath -PSProvider FileSystem -Root \\Server\SomeShare\

Et puis se référer au chemin comme UNCPath:\SomeFolder. Nettoyez Remove-PSDrivequand vous avez terminé.

De plus, vous pouvez parfois spécifier FileSystem::\\Server\SomeShare\SomeFoldercomme chemin. J'ai vu des cas où cela ne fonctionne pas ... mais ça vaut le coup.

TheCompWiz
la source
Dans ce contexte (les données de configuration) FileSystem::\\Server\SomeShare\SomeFolderest définitivement la voie à suivre
Mathias R. Jessen
2
Merci pour les suggestions, mais malheureusement en utilisant l'un d'eux, je reçois le message d'erreurRelative path is not supported
Richard