es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Copiar archivo desde una computadora remota a una computadora local dentro de una sesión de Invoke-command en PowerShell.

Utilizo un código pwsh para conectarme a un equipo remoto y generar un archivo CSV.

  1. Hago esto mediante Invoke-Command, el código funciona perfectamente y genera un archivo CSV en el servidor.
  2. El nombre del archivo CSV se genera dinámicamente.

Sin embargo, no puedo copiar ese archivo desde el equipo remoto al equipo local.

¿Existe alguna forma de utilizar copy-item dentro de Invoke-Command?

Por favor, aconseje/guíe.

A continuación se muestra un fragmento del código.


“`

<h1>Servidor objetivo</h1>

$TargetServer = "xxx.xxx.xxx.xxx"

<h1>Capturar las credenciales de la máquina virtual</h1>

$creds = Get-Credential -Title "Ingrese la contraseña de administrador" -UserName admin

<h1>Crear sesión</h1>

$session = New-PSSession -ComputerName $TargetServer -Credential $creds

$scriptBlock = {
# Intentar la instalación
Install-Module -Name Join-Object

<pre><code># Intentar la importación
Import-Module -Name Join-Object

# Dirección IP
$ipAdress = (Get-NetIPAddress -AddressFamily IPV4).IPAddress[0]

# Establecer el nombre del archivo CSV
$lastLogonReportName = "LastLogonReport__" + $ipAdress + "__" + (get-date -Format "dd MMM yyyy_dddd") + ".csv"

… …
… …
… …
… …

$Output

# Establecer la ubicación en la carpeta de descargas del usuario
Set-Location -Path $HOME\Downloads

$Output | Export-Csv -Path ./$lastLogonReportName

# Copy-Item $lastLogonReportName -Destination "D:\" -FromSession $Session
</code></pre>

}

Invoke-Command -ComputerName $TargetServer -Credential $creds -ScriptBlock $scriptBlock
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes utilizar el cmdlet Copy-Item dentro del bloque de script Invoke-Command para copiar el archivo CSV generado desde el equipo remoto a tu equipo local.

    Puedes modificar el bloque de script de la siguiente manera:

    $scriptBlock = {
        #   Intento de instalación
        Install-Module -Name Join-Object
    
        #   Intento de importación
        Import-Module -Name Join-Object 
    
        #   Dirección IP
        $ipAdress = (Get-NetIPAddress -AddressFamily IPV4).IPAddress[0]
    
        #   Establecer el nombre del archivo CSV
        $lastLogonReportName = "InformeUltimoInicioSesion__" + $ipAdress + "__" + (get-date -Format "dd MMM yyyy_dddd") + ".csv"
    
        ... ...
        ... ...
        ... ...
        ... ...
    
        #   Establecer ubicación en la carpeta de Descargas del usuario
        Set-Location -Path $HOME\Downloads
    
        $Output | Export-Csv -Path ./$lastLogonReportName
    
        # Copiar el archivo CSV al equipo local
        Copy-Item -Path $HOME\Downloads\$lastLogonReportName -Destination "C:\CarpetaLocal\" -FromSession $using:session        
    }
    

    Observa que hemos añadido un cmdlet Copy-Item al bloque de script justo después de guardar el archivo CSV de manera local. También hemos utilizado el modificador de ámbito $using para acceder a la variable de sesión remota. El parámetro -FromSession se utiliza para indicar la sesión remota desde la cual queremos copiar el archivo.

    Con estas modificaciones, el archivo CSV generado debería ser copiado desde el equipo remoto a tu equipo local.

Comments are closed.