Estou tentando usar o PsExec para executar o Expand-Archive em um computador remoto, extraindo para uma pasta dentro dos Arquivos de Programas, mas o Expand-Archive continua retornando o erro:
Expand-Archive : A positional parameter cannot be found that accepts argument 'Files\Folder'
Eu entendo que isso significa que Expand-Archive chega ao espaço em "Arquivos de Programas" e pensa que um argumento está concluído e começa a tentar interpretar o próximo.
Eu usei as seguintes variantes do comando, todas com o mesmo resultado:
Aspas duplas em toda a parte do Powershell, usando a variável de ambiente %programfiles%:
.\PsExec.exe \\computername /s cmd /c "C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -command expand-archive c:\temp\bc.zip -destinationpath %programfiles%\Folder"
Aspas simples ao redor do caminho da pasta de destino, usando a variável de ambiente %programfiles%:
.\PsExec.exe \\computername /s cmd /c C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -command expand-archive c:\temp\bc.zip -destinationpath '%programfiles%\Folder'
Aspas duplas ao redor do caminho da pasta de destino, usando a variável de ambiente %programfiles%:
.\PsExec.exe \\computername /s cmd /c C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -command expand-archive c:\temp\bc.zip -destinationpath "%programfiles%\Folder"
Sem aspas, usando a variável de ambiente %programfiles%:
.\PsExec.exe \\computername /s cmd /c C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -command expand-archive c:\temp\bc.zip -destinationpath %programfiles%\Folder
Aspas duplas em torno do caminho da pasta totalmente digitado:
.\PsExec.exe \\computername /s cmd /c C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy bypass -command expand-archive c:\temp\bc.zip -destinationpath "C:\Program Files\Folder"
Eu tentei fazer o mesmo com o psexec e estou enfrentando todos os tipos de erros.
Eu pessoalmente usaria o comando invoke do powershell. Isso também funcionaria para você? Se não, vou tentar mexer com o psexec um pouco mais, se você quiser.
Exemplo :
$PATH = "EnterPath"
$COMPUTERNAME = "EnterComputerName"
Invoke-Command -ComputerName $COMPUTERNAME -ScriptBlock {
}
O script será executado em um determinado computador, $env:ProgramFiles converte para a variável no computador remoto, equivalente a %programfiles% em cmd.
Eu não diria que a resposta aceita não está correta, mas não está visando o problema real na minha opinião.
Aqui não há nenhum problema com
PSExec
, mas um problema com a forma como oPowerShell
comando é chamado.Ao chamar o comando Powershell muitas vezes, não podemos simplesmente passar comandos sem aspas, especialmente aqueles comandos que precisam de argumentos entre aspas, como caminhos espaçados da estrutura de diretórios do sistema operacional. Portanto, temos que aplicar e comercial
&
antes do comando ao chamar o comando e escapar das aspas internas do comando para argumentos, que se parecem com isso:OU
Você também pode ignorar a
-command
opção no one-liner acima, desde que forneça&
corretamente antes do comando real :)