A execução de um comando git usando resultados remotos do powershell em um NativeCommmandError

2

Estou recebendo um erro ao executar um script do PowerShell remoto. Da minha máquina local, estou executando um script do PowerShell que usa Invoke-Command to cd em um diretório em uma instância remota do Amazon Windows Server e um subseqüente Invoke-Command para executar scripts que residem nessa instância do servidor. O script no servidor está tentando clonar um repositório do GitHub. Eu posso fazer coisas com sucesso no script do servidor como "ls" ou até mesmo "git --version". No entanto, git clone , git pull , etc. resultam no seguinte erro:

Cloning into 'MyRepo'... + CategoryInfo : NotSpecified: (Cloning into 'MyRepo'...:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError

Esta é a primeira vez que uso o PowerShell ou o Windows Server. Alguém pode fornecer alguma orientação sobre este problema.

O script do cliente:

$s = new-pssession -computername $server -credential $user
invoke-command -session $s -scriptblock { cd C:\Repos; ls } 
invoke-command -session $s -scriptblock { param ($repo, $branch) & '.\clone.ps1' -repository $repo -branch $branch} -ArgumentList $repository, $branch
exit-pssession

O script do servidor:

param([string]$repository = "repository", [string]$branch = "branch")
git --version
start-process -FilePath git -ArgumentList ("clone", "-b $branch    https://github.com/MyGithub/$repository.git") -Wait 

Eu mudei o script do servidor para usar o processo de início e não estou mais lançando a exceção. Ele cria o novo diretório de repositório e o diretório .git, mas não grava nenhum arquivo do repositório do github. Isso cheira a um problema de permissões. Mais uma vez invocar o script manualmente (área de trabalho remota na caixa amazon e executá-lo a partir do powershell) funciona como um encanto.

    
por user204777 08.01.2014 / 16:08

3 respostas

1

Eu também vejo esse 'erro' ao usar o Powershell ISE e o Git localmente. Não é realmente um erro; em vez disso, o Powershell ISE está interpretando incorretamente a saída do console do Git. Se você tentar o Powershell baseado em console, você deve perceber que não há nenhuma informação de erro exibida. Parece que isso é apenas uma peculiaridade do Powershell ISE (e possivelmente outros hosts Powershell que não lidam bem com a saída do aplicativo de console).

    
por 10.06.2014 / 21:51
1

No que diz respeito ao Powershell, é o comportamento correto.

Infelizmente (pelo menos na minha opinião), o git gera muitas informações para stderr mesmo quando não há nenhum erro. Por exemplo, git checkout -b somenewbranch emitirá itens como listas de arquivos modificados para stdout, mas a mensagem Switched to new branch somenewbranch (que eu acho que é a mais relevante) para stderr .

Uma das formas mais comuns de lidar com isso é redirecionar stderr output para stdout , por exemplo:

git rebase master 2>&1

Isso é suficiente para a maioria dos casos de uso que eu já vi. Se você quiser fazer algo com a própria saída textual, precisará ir um pouco mais longe, pois o Powershell armazenará as linhas originárias do stderr como RemoteException em vez de string . Um breve exemplo de como você pode lidar com algo que precisa registrar a saída para o console:

$result  = Invoke-Expression "& git checkout -b somefeaturebranch 2>&1"

$output = ""
foreach($line in $result)
{
    $val = ""
    if($line.GetType().Name -eq "ErrorRecord")
    {        
        $val = $line.Exception.Message
    }else{
        $val = $line
    }   
    $output = "$output'r'n$val"
}

Write-Host $output
    
por 07.11.2015 / 09:39
0

Você pode encontrar o problema do Double Hop explicado aqui: link

    
por 09.01.2014 / 16:39