Copia DSC de PowerShell del recurso compartido de red

17

Estoy tratando de usar PowerShell DSC para copiar el contenido de la carpeta desde un recurso compartido de red. Aquí está el código:

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

Sin embargo, esto no funciona: cuando lo ejecuto aparece el siguiente mensaje de error:

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

Obtengo resultados similares cuando intento instalar un paquete desde un recurso compartido de red o extraer un archivo de un recurso compartido de red. Estoy ejecutando PowerShell 4 en Windows Server 2008 R2 SP1.

¿Hay alguna manera de usar PowerShell DSC con recursos compartidos de red?

Ricardo
fuente
¿No se describe una solución en este enlace? powershellmagazine.com/2013/09/02/…
ErikE
Gracias por señalarme en la dirección correcta. No me llegó hasta allí porque el recurso compartido estaba en la misma máquina y, por lo tanto, tuve que otorgar permisos a la cuenta del SISTEMA. Si desea dar una respuesta al señalar ese enlace, le otorgaré la recompensa.
Richard

Respuestas:

14

El DSC Local Configuration Manager se ejecuta como la cuenta del SISTEMA local, no como su cuenta de usuario. Por lo tanto, no podrá acceder a los recursos de la red a menos que se le otorguen permisos explícitos.

Hay dos situaciones posibles. O el recurso compartido está en la misma máquina a la que se aplica la configuración DSC (llamemos a esta máquina A) o el recurso compartido está en una máquina diferente (llamemos a esta máquina B).

Si el recurso compartido está en la máquina A, los permisos de LECTURA deben otorgarse al usuario del SISTEMA. Por ejemplo:

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

Si el recurso compartido está en la máquina B, los permisos de LECTURA deben otorgarse a la cuenta de la computadora de la máquina A. Por ejemplo:

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

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

Ricardo
fuente
5

Se DSCejecuta localhostpara aplicar la configuración. Esto significa que los DSCarchivos de recursos deben distribuirse a cada máquina a través de la cual se configurará DSC.

Por lo tanto, la administración de permisos es crucial al copiar los archivos DSC de un recurso compartido.

DSCse ejecuta bajo la NT AUTHORITY\SYSTEMcuenta y, a menos que Credentialse haya establecido el atributo, Computer accountse utiliza al extraer los archivos de un recurso compartido de red.

Por lo tanto y dependiendo de dónde se extraen los archivos, la SYSTEMcuenta debe tener readpermisos en un recurso compartido local y la Computer accountnecesidad de readpermisos en un recurso compartido remoto.

Esto se detalla concretamente en la respuesta de Richards, que amplía la sintaxis en la fuente original del blog para esta información.

ErikE
fuente
0

No tengo tiempo en este momento para investigar más sobre esto, pero parece que es posible pasar de forma segura las credenciales para que las use el Administrador de configuración local. De hecho, en la publicación del blog, su ejemplo utiliza el recurso File para extraer archivos de un recurso compartido de red. Espero probar esto pronto, luego volveré a dar una mejor respuesta.

Blog de TechNet: ¿Desea proteger las credenciales en la configuración de estado deseada de Windows PowerShell? - por Travis Plunk

Nathan Hartley
fuente
-2

Powershell es casi tan tonto como el viejo cmd shell. Todavía tiene un soporte muy limitado para rutas UNC. Con eso en mente ... ¿has intentado alias la ruta UNC? es decir

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

Y luego se refieren a la ruta como UNCPath:\SomeFolder. Limpia con Remove-PSDrivecuando hayas terminado.

Además, a veces puede especificar FileSystem::\\Server\SomeShare\SomeFoldercomo la ruta. He visto casos en los que esto no funciona ... pero vale la pena intentarlo.

TheCompWiz
fuente
En este contexto (datos de configuración) FileSystem::\\Server\SomeShare\SomeFolderes definitivamente el camino a seguir
Mathias R. Jessen
2
Gracias por las sugerencias, pero desafortunadamente al usar cualquiera de ellas, recibí el mensaje de errorRelative path is not supported
Richard