Antes de fazer qualquer outra coisa, certifique-se de que não haja algo suspeito acontecendo com a sua sintaxe, executando o comando com valores codificados:
Copy-Item 'D:\location.exe' -Destination \Computer1\D$\ -Recurse -PassThru
Sem ver sua mensagem de erro completa, não tenho certeza se você está tendo acesso negado em sua máquina local ou na (s) máquina (s) remota (s).
Supondo que seja sua máquina local, eleve seu prompt (execute-o como administrador). Eu normalmente não vejo esse problema ao puxar de uma unidade diferente de 'C', então não estou 100% certo de que este é o problema que você está tendo.
Você poderia descobrir que a conta que está executando não tem permissão para gravar / acessar em máquinas remotas. Parece que você começou a especificar um nome de usuário e uma senha lá, mas você não está realmente usando ainda.
Para obter um objeto de credencial que você pode usar com Copy-Item
, considere o seguinte:
$username = "adminuser"
$password = "pass"
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, ($password | ConvertTo-SecureString -AsPlainText -Force)
Observe que isso deixará a senha em texto sem formatação no script para que qualquer pessoa possa ver. Pessoalmente, prefiro fazer isso:
$username = "adminuser"
$cred = Get-Credential $username
Isso abrirá uma caixa de diálogo Segurança do Windows com o nome de usuário pré-preenchido e pedirá que você digite a senha.
Você pode usar o $cred
com outros comandos, como tal:
Copy-Item $FileLocation -Destination \$_\$Destination -Credential $cred -Recurse -PassThru
Devo salientar que isso não protege suas credenciais. Contanto que esse objeto $ cred exista, é possível extrair a senha em texto plano ( $cred.GetNetworkCredential().password
).