¿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?
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:
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: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>