Como copiar um arquivo para recursos de rede usando caminhos UNC

1

Estou tentando fazer algo bem simples e, conceitualmente, deve funcionar, mas não parece, e não sei por quê. Eu tenho um arquivo que eu preciso copiar para várias pastas em vários servidores. Eu tenho procurado e tentando soluções diferentes a manhã toda. Aqui está o que eu acho que deveria funcionar:

$servers = @("\server1.domain.com","\server2.domain.com","\server3.domain.com","\server4.domain.com")

$dests = @("\E$\path1","\E$\path2","\E$\path3","\E$\path4","\E$\path5")

$file = "C:\Users\user\file.txt"

foreach ($server in $servers)
{net use $server /USER:domain\username password
{foreach ($dest in $dests)
{copy-item -Path $file -Destination $server$dest}}}

A lógica é que ele atingirá o primeiro foreach, obterá o primeiro nome do servidor, fará um uso da rede para armazenar em cache minhas credenciais no computador, atingirá o segundo foreach, obterá o primeiro caminho e copiará o arquivo para o primeiro caminho o primeiro servidor, copie o arquivo para o segundo caminho no primeiro servidor, etc. etc. No final dos caminhos, ele retornará ao primeiro foreach, passará para o segundo servidor e percorrerá a lista de caminhos o segundo servidor, e assim por diante.

Eu vi posts semelhantes em outros lugares onde eles não usam o segundo foreach, mas eu tentei isso e não funcionou, assim:

foreach ($server in $servers)
{net use $server /USER:domain\username password
{copy-item -Path $file -Destination $server$dest}}}

Obrigado por qualquer ajuda que alguém possa me dar sobre isso. Tenho certeza de que é algo realmente simples que estou perdendo.

    
por Squirreljester 16.06.2016 / 20:16

1 resposta

2

Ao usar sistemas de arquivos de recursos de rede e caminhos UNC, você deve usar o filesystem:: PSProvider no Powershell. Veja alguns exemplos:

Test-Path "filesystem::\127.0.0.1\c$"
Test-Path "filesystem::\$env:computername\c$"

Adaptar este processo ao seu código deve ser tão simples como:

foreach ($server in $servers){

    net use $server /USER:domain\username password

    foreach ($dest in $dests){

        copy-item -Path $file -Destination "filesystem::$server$dest"

    }#End foreach ($dest in $dests)

}#End foreach ($server in $servers)

Lembre-se de que, como profissional do PowerShell, seu código deve ser lido com a maior facilidade possível. Como em todos os textos profissionais, o estilo é importante.

Além disso, você deve procurar usar Get-Credential para usar nome de usuário / senhas para não escrevê-los em texto simples.

    
por 16.06.2016 / 22:29