none
Códigos de Error usando SFTP del módulo PoSH RRS feed

  • Pregunta

  • Buenos dias,

    Estoy usando un script de poweshell con el módulo PoSH a través del cual , me conecto por sftp a un servidor linux y recojo unos ficheros para dejarlos en un directorio local de mi servidor Windows.

    Cuando cazo los errores, lo hace correctamente con el mensaje correcto en cada acción, si no existen ficheros en el server remoto me lo dice como tal y si existe un fichero en el directorio local destino me dice que ya existe el fichero. Lo que necesitaria es algún código de error generado cunado no existan ficheros en remoto y otro para cuando detecte que existe el fichero en el destino del servidor local. Con $._Exception.HResult me da el mismo código de error si existe el fichero en el remoto como si existe enb local.

    Como puedo saber el código de error de uno y otro?

    Muchas Gracias


    David

    martes, 5 de febrero de 2019 11:33

Todas las respuestas

  • Hola,

    Lo primero que se me ocurre es que hagas manualmente la comprobación de forma separada para los ficheros en remoto y para los ficheros en local, pero para poder ayudarte mejor necesitaríamos que publicaras el script y poder ver el código.

    Si por algún motivo tuviera harcodeadas direcciones, usuarios o otro tipo de información privada eliminala antes de publicarlo.

    Un saludo.

    Diego

    martes, 5 de febrero de 2019 12:27
  • Buenas,

    Esta es la parte del script donde hago el get de los ficheros del servidor de Linux para dejárlos en un servidor de Windows

    try
    {
     Get-SFTPFile -SFTPSession $Session -RemoteFile "./usuariosSistemas/ficheros/UsersAZ/newUsersAZ.csv" -LocalPath "C:\UserFiles\Azure" -ErrorAction Stop
    }
    Catch
    {
     $ErrorMessage=$_.Exception.Message
     $FailedItem=$_.Exception.HResult
     (Get-Date -Format "dd-MM-yyyy HH-mm-ss")+"`t[ERROR]:`t" | Out-File $Log -append
     (Get-Date -Format "dd-MM-yyyy HH-mm-ss")+"`t[MESSAGE ERROR]:`t$ErrorMessage"| Out-File $Log -append
     (Get-Date -Format "dd-MM-yyyy HH-mm-ss")+"`t[ITEM ERROR]:`t$FailedItem"| Out-File $Log -append

    }

    Solo he puesto la parte que hago un copy del remoto al local de un fichero en particular

    Es mi primer script en powershell

    Muchas Gracias


    David

    martes, 5 de febrero de 2019 12:49
  • Hola,

    Sería algo así:

    try
    {
    	$LocalFile = "C:\UserFiles\Azure"
    	if (Test-Path $LocalFile)
    	{
    		Write-Warning "El fichero local ya existe"
    		Exit 3001 #Aquí puedes definirte el código de error que quieras para la salida si el fichero local existe. He puesto 3001 únicamente como ejemplo.
    	}
    	
    	$RemoteFile = "./usuariosSistemas/ficheros/UsersAZ/newUsersAZ.csv"
    	if (Test-SFTPPath -SessionId $Session -RemoteFile $RemoteFile) #Test-SFTPPath sacado de la documentación de PoSH. No lo he probado.
    	{
     		Get-SFTPFile -SFTPSession $Session -RemoteFile $RemoteFile -LocalPath $LocalFile -ErrorAction Stop
    	}
    	else
    	{
    		Write-Warning "El fichero remoto no existe"
    		Exit 3002 #Aquí puedes definirte el código de error que quieras para la salida si el fichero remoto no existe. He puesto 3002 únicamente como ejemplo.
    	}
    }
    Catch
    {
    	 $ErrorMessage=$_.Exception.Message
    	 $FailedItem=$_.Exception.HResult
    	 (Get-Date -Format "dd-MM-yyyy HH-mm-ss")+"`t[ERROR]:`t" | Out-File $Log -append
    	 (Get-Date -Format "dd-MM-yyyy HH-mm-ss")+"`t[MESSAGE ERROR]:`t$ErrorMessage"| Out-File $Log -append
    	 (Get-Date -Format "dd-MM-yyyy HH-mm-ss")+"`t[ITEM ERROR]:`t$FailedItem"| Out-File $Log -append
    }

    Espero que te sirva.

    Un saludo.

    Diego


    martes, 5 de febrero de 2019 13:48
  • Muchas Gracias Diego ,

    Me sirvió mucho y lo tengo solucionado

    Saludos


    David

    jueves, 7 de febrero de 2019 9:39