Cópia do PowerShell DSC do compartilhamento de rede

17

Estou tentando usar o PowerShell DSC para copiar o conteúdo da pasta de um compartilhamento de rede. Aqui está o código:

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

No entanto, isso não funciona - quando eu o executo, recebo a seguinte mensagem de erro:

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

Recebo resultados semelhantes ao tentar instalar um pacote de um compartilhamento de rede ou extrair um arquivo morto de um compartilhamento de rede. Estou executando o PowerShell 4 no Windows Server 2008 R2 SP1.

Existe uma maneira de usar o PowerShell DSC com compartilhamentos de rede?

Richard
fonte
Não há uma solução descrita neste link? powershellmagazine.com/2013/09/02/...
ErikE
Obrigado por me apontar na direção certa. Não me levou até lá porque o compartilhamento estava na mesma máquina e, portanto, tive que conceder permissões à conta SYSTEM. Se você deseja responder ao apontar para esse link, eu concederei a você a recompensa.
Richard

Respostas:

14

O DSC Local Configuration Manager é executado como a conta SYSTEM local, não a sua conta de usuário. Portanto, ele não poderá acessar os recursos da rede, a menos que recebam permissões explícitas.

Existem duas situações possíveis. O compartilhamento está na mesma máquina em que a configuração DSC está sendo aplicada (vamos chamar esta máquina A) ou o compartilhamento está em uma máquina diferente (vamos chamar essa máquina B).

Se o compartilhamento estiver na máquina A, as permissões READ precisarão ser concedidas ao usuário do SISTEMA. Por exemplo:

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

Se o compartilhamento estiver na máquina B, é necessário conceder permissões de leitura à conta do computador da máquina A. Por exemplo:

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

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

Richard
fonte
5

A DSCexecução é executada localhostpara aplicar a configuração. Isso significa que os DSCarquivos de recursos precisam ser distribuídos para cada máquina que deve ser configurada DSC.

Portanto, o gerenciamento de permissões é crucial ao copiar os arquivos DSC de um compartilhamento.

DSCé executado na NT AUTHORITY\SYSTEMconta e, a menos que o Credentialatributo tenha sido definido, ele Computer accounté usado ao extrair os arquivos de um compartilhamento de rede.

Portanto, e dependendo de onde os arquivos são extraídos, a SYSTEMconta precisa receber readpermissões em um compartilhamento local e a Computer accountnecessidade de obter readpermissões em um compartilhamento remoto.

Isso está detalhado detalhadamente na resposta de Richards, que expande a sintaxe na fonte original do blog para essas informações.

ErikE
fonte
0

No momento, não tenho tempo para investigar mais isso, mas parece possível passar credenciais com segurança para o Gerenciador de Configuração Local usar. De fato, na postagem do blog, seu exemplo usa o recurso File para extrair arquivos de um compartilhamento de rede. Espero tentar isso em breve, e depois voltar a melhorar essa resposta.

Blog do TechNet: Deseja proteger credenciais na configuração de estado desejado do Windows PowerShell? - por Travis Plunk

Nathan Hartley
fonte
-2

O PowerShell é quase tão burro quanto o antigo shell cmd. Ele ainda possui suporte muito limitado para caminhos UNC. Com isso em mente ... você já tentou usar o alias do caminho UNC? ie

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

E, em seguida, consulte o caminho como UNCPath:\SomeFolder. Limpe Remove-PSDrivequando terminar.

Além disso, às vezes você pode especificar FileSystem::\\Server\SomeShare\SomeFoldercomo o caminho. Já vi casos em que isso não funciona ... mas vale a pena tentar.

TheCompWiz
fonte
Neste contexto (config de dados) FileSystem::\\Server\SomeShare\SomeFolderé definitivamente o caminho a percorrer
Mathias R. Jessen
2
Obrigado pelas sugestões, mas infelizmente, usando qualquer uma delas, recebo a mensagem de erroRelative path is not supported
Richard