Estou escrevendo um script do PowerShell que desejo executar do Servidor A. Desejo me conectar ao Servidor B e copiar um arquivo para o Servidor A como backup.
Se isso não puder ser feito, gostaria de me conectar ao Servidor B do Servidor A e copiar um arquivo para outro diretório no Servidor B.
Eu vejo o Copy-Item
comando, mas não vejo como dar a ele um nome de computador.
Eu teria pensado que poderia fazer algo como
Copy-Item -ComputerName ServerB -Path C:\Programs\temp\test.txt -Destination (not sure how it would know to use ServerB or ServerA)
Como posso fazer isso?
powershell
powershell-2.0
chobo2
fonte
fonte
Respostas:
Isso só funciona quando uma sessão do PowerShell é executada sob o usuário que tem direitos para ambos os compartilhamentos administrativos.
Eu sugiro usar compartilhamento de rede regular no servidor B com acesso somente leitura para todos e simplesmente chamar (do Servidor A):
fonte
Copy-Item -FromSession
).Do PowerShell versão 5 em diante (incluído no Windows Server 2016, para download como parte do WMF 5 para versões anteriores ), isso é possível com remoting. A vantagem disso é que funciona mesmo se, por qualquer motivo, você não puder acessar os compartilhamentos.
Para que isso funcione, a sessão local onde a cópia é iniciada deve ter o PowerShell 5 ou superior instalado. A sessão remota não precisa ter o PowerShell 5 instalado - funciona com versões do PowerShell tão baixas quanto 2 e versões do Windows Server tão baixas quanto 2008 R2. [1]
No servidor A, crie uma sessão para o servidor B:
E então, ainda de A:
A cópia de itens para B é feita com
-ToSession
. Observe que os caminhos locais são usados em ambos os casos; você tem que controlar em qual servidor você está.[1]: ao copiar de ou para um servidor remoto que tem apenas PowerShell 2, cuidado com este bug no PowerShell 5.1 , que no momento da escrita significa que a cópia recursiva de arquivo não funciona com
-ToSession
, uma cópia aparentemente não funciona em todos com-FromSession
.fonte
scp
maisssh
no Linux ... não há necessidade de se preocupar com ações traquinas!Use
net use
ouNew-PSDrive
para criar uma nova unidade:New-PsDrive: crie um novo PsDrive visível apenas no ambiente PowerShell:
Uso líquido: crie uma nova unidade visível em todas as partes do sistema operacional.
fonte
New-PSDrive : A specified logon session does not exist. It may already have been terminated
-> Acho que uma sessão anterior ainda está em andamento -> Então tentei usarRemove-PSDrive
-> ainda não funciona. Tambémnet use <driveLetter> /delete
não ajudou. Posso fazer mais alguma coisa para executar este comando em uma configuração de compilação de software?New-PSDrive
duas vezes que deveriaA drive with the name 'Y' already exists.
Apenas no caso de o arquivo remoto precisar de sua credencial para ser acessado, você pode gerar um objeto System.Net.WebClient usando o cmdlet New-Object para "Copiar arquivo remotamente", assim
Ou se precisar fazer upload de um arquivo, você pode usar UploadFile:
fonte
Nenhuma das respostas acima funcionou para mim. Continuei recebendo este erro:
Então isso fez por mim:
Então, de meu host, minha máquina na caixa Executar, acabei de fazer isso:
fonte