cópia de arquivo remoto no windows

0

Estou executando um processo automatizado em uma máquina específica, variadamente uma caixa do Windows 7 ou uma caixa do Windows Server 2012. Essas caixas estão conectadas a um servidor de arquivos pela rede. A rede é uma rede de 40GB, por isso não é lenta. Temos que transferir grandes volumes de dados. Algumas dessas transferências são simplesmente cópias de arquivos do servidor de arquivos para o servidor de arquivos. Ou seja, em nossa máquina AppServer, estamos (efetivamente) executando um comando como

\ AppServer \ C $ & gt; Copiar \ FileServer \ Share \ Dir1 * \ FileServer \ Share2 \ Dir2

ou talvez

\ AppServer \ C $ & gt; robocopy \ FileServer \ compartilhamento \ Dir1 \ FileServer \ Share2 \ Dir2 / S *

Mesmo numa rede de 40 GB, algumas destas cópias demoram quantidades de tempo significativas, e. 10 minutos, e eles podem ser repetidos 20 vezes.

Fazer a mesma cópia no próprio servidor de arquivos é significativamente mais rápido, pois não há afunilamento de rede. É bem possível que usemos a execução remota no PowerShell para que a cópia seja feita no servidor de arquivos. Atualmente estamos fazendo isso para alguns dos diretórios maiores. No entanto, há uma sobrecarga significativa apenas na configuração de um comando remoto no powershell e estou procurando um método melhor de fazer uma cópia remota.

Alguém tem alguma recomendação para o melhor método de executar uma cópia remota no próprio servidor de arquivos? Obrigado.

David I. McIntosh
fonte

Respostas:

1
  1. Habilitar Remoting do PowerShell em seus servidores.
  2. Usar Invoke-Command.

Também recomendo garantir que o PowerShell seja a mesma versão em todos os seus servidores. O AFAIK, Server 2012 é fornecido com o PowerShell 3.0 e o Serve 2012 R2 vem com o 4.0. Tanto o 3.0 quanto o 4.0 estão disponíveis para o Win7 e Server 2008, portanto, há muito poucas razões para não atualizar. As pequenas melhorias na sintaxe - notavelmente Get-ChildItem -Directory e -File, Where-Object ser capaz de canalizar, e não precisar se preocupar com coisas, por vezes, sendo matrizes e não sendo matrizes quando você quiser usar o método Count () - valem a pena, IMO. Além disso, o ISE é muito bom em 4.0.

Bacon Bits
fonte
0

O PsExec é uma ferramenta muito usada para executar um comando em um computador remoto.

PsExec, uma ferramenta da Microsoft pode ser encontrada Aqui .

O PsExec é uma substituição de telnet leve que permite executar processos em outros sistemas, completos com interatividade total para aplicativos de console, sem precisar instalar manualmente o software do cliente. Os usos mais poderosos do PsExec incluem o lançamento de prompts de comandos interativos em sistemas remotos e ferramentas de habilitação remota, como o IpConfig, que de outra forma não teriam a capacidade de mostrar informações sobre sistemas remotos.

O PsExec faz parte do PsTools.

Usando o PsExec

Veja a edição de julho de 2004 da revista Windows IT Pro para o artigo de Mark que aborda o uso avançado do PsExec.

Usage: psexec [\\computer[,computer2[,...] | @file]][-u user [-p psswd][-n s]
    [-r servicename][-h][-l][-s|-e][-x][-i [session]][-c [-f|-v]][-w directory]
    [-d][-][-a n,n,...] cmd [arguments]
-a  Separate processors on which the application can run with commas where 1 is 
    the lowest numbered CPU. For example, to run the application on CPU 2 and 
    CPU 4, enter: "-a 2,4"
-c  Copy the specified program to the remote system for execution. If you omit 
    this option the application must be in the system path on the remote system.
-d  Don't wait for process to terminate (non-interactive).
-e  Does not load the specified account’s profile.
-f  Copy the specified program even if the file already exists on the remote 
    system.
-i  Run the program so that it interacts with the desktop of the specified 
    session on the remote system. If no session is specified the process runs in
    the console session.
-h  If the target system is Vista or higher, has the process run with the 
    account's elevated token, if available.
-l  Run process as limited user (strips the Administrators group and allows only
    privileges assigned to the Users group). On Windows Vista the process 
    runs with Low Integrity.
-n  Specifies timeout in seconds connecting to remote computers.
-p  Specifies optional password for user name. If you omit this you will be 
    prompted to enter a hidden password.
-r  Specifies the name of the remote service to create or interact with.
-s  Run the remote process in the System account.
-u  Specifies optional user name for login to remote computer.
-v  Copy the specified file only if it has a higher version number or is newer
    on than the one on the remote system.
-w  Set the working directory of the process (relative to remote computer).
-x  Display the UI on the Winlogon secure desktop (local system only).
-priority   Specifies -low, -belownormal, -abovenormal, -high or -realtime to 
    run the process at a different priority. Use -background to run at low 
    memory and I/O priority on Vista.
computer    Direct PsExec to run the application on the remote computer or 
    computers specified. If you omit the computer name, PsExec runs the
    application  on the local system, and if you specify a wildcard (\\*), 
    PsExec runs the command on all computers in the current domain.
@file   PsExec will execute the command on each of the computers listed in the 
    file.
cmd Name of application to execute.
arguments   Arguments to pass (note that file paths must be absolute paths on 
    the target system).
-accepteula This flag suppresses the display of the license dialog.

Você pode incluir aplicativos com espaços em seus nomes entre aspas, por exemplo,

psexec \ marklap "c: \ long name app.exe"

LPChip
fonte
Obrigado. Eu tentei o PsExec no passado para execução remota em outro contexto e descobri que não podia fazer o que queria, embora não consiga lembrar o motivo exato agora. (Não me entenda mal, sou um grande fã de todas as ferramentas da sysinternal). Vou revisitar isso talvez.
David I. McIntosh