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.

¿Cómo se utiliza [runtime.interopservices.marshal]::GetActiveObject(“…”) en PowerShell Core?

Contexto

Entiendo que PowerShell Core se basa en .NET Core y no en .NET Framework, por lo que es independiente de la plataforma y no tiene API específicas de Windows como servicios de interoperabilidad, COM, etc. incorporados.

Mi declaración siguiente funciona en PowerShell 5.x:

$dte = [runtime.interopservices.marshal]::GetActiveObject("visualstudio.dte")

Pregunta

Entonces estoy buscando una solución alternativa, ¿puedo seguir utilizando alguna forma de comunicarme con Windows, tal vez llamando/llamando de forma remota? ¿un script de PowerShell 5.x desde mi script de PowerShell Core 7.x?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Respuesta

    Sí, puedes utilizar PowerShell remoto para ejecutar un script de PowerShell 5.x desde tu script de PowerShell Core 7.x en una máquina Windows. Esto te permitirá utilizar APIs específicas de Windows como servicios de interoperabilidad y COM.

    Para utilizar PowerShell remoto, primero debes habilitarlo en la máquina Windows ejecutando el siguiente comando en un símbolo de PowerShell elevado:

    Enable-PSRemoting -Force
    

    Luego, en tu script de PowerShell Core 7.x, utiliza el cmdlet Invoke-Command para ejecutar un script de PowerShell 5.x en la máquina Windows. Aquí tienes un ejemplo:

    $cred = Get-Credential # ingresa las credenciales de la máquina Windows
    $session = New-PSSession -ComputerName <nombremáquinawindows> -Credential $cred
    
    Invoke-Command -Session $session -ScriptBlock {
        # aquí ejecuta comandos de PowerShell 5.x
        $dte = [runtime.interopservices.marshal]::GetActiveObject("visualstudio.dte")
    }
    
    Remove-PSSession $session
    

    Esto establecerá una conexión con la máquina Windows utilizando las credenciales especificadas y ejecutará los comandos de PowerShell 5.x en el contexto de esa máquina, permitiéndote utilizar APIs específicas de Windows.

    Nota: Recuerda que los comandos de PowerShell 5.x deben ser compatibles con PowerShell 7.x, ya que el PowerShell remoto ejecutará los comandos en un contexto de PowerShell 7.x.</nombremáquinawindows>

Comments are closed.