start script run open how from ejecutar desde comando bat powershell editing powershell-remoting

open - run powershell script from cmd



cómo editar un archivo en la sesión remota de powershell(powershell) (8)

Me estoy conectando a otra computadora usando Powershell Remoting, realmente agradable. puedo hacer muchas cosas, pero ¿cómo puedo editar un archivo?

PS C: / Users / guutlee> Enter-PSSession -ComputerName appprod

[appprod]: PS C: / Users / guutlee / Documents> cd / myapp

[appprod]: PS C: / myapp>

¿Qué puedo hacer para abrir un editor de archivos en un archivo en la máquina remota?

[appprod]: PS C: / myapp> editar app.config

así que edite "nombre de archivo" simplemente parece colgar, desde powershell.exe o desde powershell_ise.exe

Lo único que se me ocurre es volver a salir de la sesión e iniciar "/ webprod / c $ / inetpub / myapp / web.config", lo que abriría Visual Studio.

[appprod]: PS C: / myapp> exit

PS C: / Users / guutlee> start / agobuild / c $ / myapp / app.config

PS C: / Users / guutlee> Enter-PSSession -ComputerName appprod

[appprod]: PS C: / Users / guutlee / Documents> cd / myapp

[appprod]: PS C: / myapp> myapp.exe

Por supuesto, con esto tengo que volver a encontrar el archivo, espero que el c $ share esté disponible y accesible, y reconectar mi sesión y volver a encontrar mi directorio de trabajo cuando quiera continuar. No parece muy elegante.

Tal vez podría envolver esta es una función, pero teniendo un momento difícil envolviendo mi cabeza alrededor de eso ..

Entonces, ¿cómo puedo editar convenientemente un archivo con una sesión remota?

EDITAR

La publicación de kbrimington me hizo pensar en la opción -X de ssh. probablemente sería algo increíble para las sesiones de PowerShell poder reenviar las aplicaciones de ventana al entorno original de ventanas ...

pero aún así sería feliz de solo editar el archivo.

EDITAR

pruebas usando vi, emacs, cmd y editar

PS C: / Users / Meredith> Enter-PSSession -ComputerName appprod

[appprod]: PS C: / Users / guutlee / Documents> C: / vim / vim72 / vim filename.txt

[appprod]: PS C: / Users / guutlee / Documents> C: / emacs-23.2 / bin / emacs.exe -nw filename.txt

emacs.exe: emacs: la entrada estándar no es un tty

+ CategoryInfo /: NotSpecified: (emacs: standard input is not a tty:String) [], RemoteException + FullyQualifiedErrorId /: NativeCommandError

[appprod]: PS C: / Users / guutlee / Documents> cmd

Microsoft Windows [Versión 6.1.7600]

Copyright (c) 2009 Microsoft Corporation. Todos los derechos reservados.

C: / Users / guutlee / Documents>

[appprod]: PS C: / Users / guutlee / Documents> edit filename.txt

vi y edita hang (Control-C para recuperar un aviso)

cmd se ejecuta, produciendo un mensaje, pero inmediatamente vuelve al mensaje de PowerShell.

emacs produce el error (la entrada estándar no es un tty)

EDITAR

Jered sugiere retirar el archivo localmente para editarlo. Embellecí su respuesta a la copia usando pssessions en lugar de UNCs (quizás esto es lo que pretendía)

PS C: / Users / Meredith> Invocar-Comando -Sesión $ ps -ScriptBlock {get-content c: /inetpub/myapp/web.config}> web.config

editar la configuración web

PS C: / Users / Meredith> get-content web.config | Invoke-Command-Session $ ps -ScriptBlock {set-content c: /inetpub/myapp/web.config}

Potencialmente podríamos ejecutar los comandos de invocación en cualquier dirección, de local a remota o remota a local.


¿No puedes extraer el archivo localmente, editarlo y publicarlo? Sé que esto es tedioso y no elegante, pero parece que los editores están teniendo problemas con las sesiones remotas.

P.ej,

Get-Content REMOTE/Filename.txt > LOCAL/Filename.txt

Realice sus cambios localmente y luego

Set-Content -path REMOTE/Filename.txt -value (get-content LOCAL/Filename.txt)

EDITAR

Además, si solo está reemplazando ciertas instancias, puede hacerlo con bastante facilidad.

P.ej,

Get-Content REMOTE/Filename.txt | foreach-object { $_ -replace "OLD", "NEW" } | Set-Content REMOTE/Filename.txt


Después de investigar mucho, encontré algo que parece relevante en la documentación de ayuda de PowerShell. En el indicador de PowerShell, escriba:

ayuda about_remote_troubleshooting

Al final del archivo de ayuda que se muestra, hay una sección titulada "RESOLUCIÓN DE PROBLEMAS DE COMPORTAMIENTO INCORRECTO", que dice:

RESOLUCIÓN DE PROBLEMAS DE COMPORTAMIENTO NO RESPONSABLE

Esta sección trata los problemas de comunicación remota que impiden que un comando complete y evite o demore la devolución del aviso de Windows PowerShell.

CÓMO INTERRUMPIR UN COMANDO

Algunos programas nativos de Windows, como programas con una interfaz de usuario, aplicaciones de consola que solicitan entrada y aplicaciones de consola que usan la API de la consola Win32, no funcionan correctamente en el host remoto de Windows PowerShell.

Cuando utiliza estos programas, puede ver un comportamiento inesperado, como sin salida, salida parcial o un comando remoto que no se completa. Para finalizar un programa que no responde, escriba CTRL + C. Para ver los errores que podrían haberse informado, escriba "$ error" en el host local y la sesión remota.

Por lo tanto, parece que incluso las aplicaciones de consola que no sean de GUI, como VIM, no funcionarán desafortunadamente. ¿Alguien quiere arrojar algo de luz sobre por qué este podría ser el caso y / o si se puede solucionar? REALMENTE me encantaría si pudiera usar vim sobre Powershell Remoting.


Hice que nano funcionara fácilmente a través de SSH en PowerShell. Está disponible en Chocolatey para que puedas hacer ...

choco install nano -y

Entonces puedes hacer ...

nano filename


Intento todas las sugerencias anteriores e incluso otras soluciones relacionadas con Microsoft, pero ninguna funciona de la manera que usted y yo queremos - "caparazón completo interactivo y receptivo" -. Si realmente quieres tener la experiencia ssh que los usuarios de Unix tienen desde el principio, te recomiendo que instales un servidor ssh. Personalmente uso freesshd, puede encontrarlo aquí http://www.freesshd.com y las instrucciones de cómo configurarlo aquí http://www.windowsnetworking.com/articles_tutorials/install-SSH-Server-Windows-Server-2008.html . Después de hacer todo lo que dice en las instrucciones, solo necesita usar cualquier aplicación de cliente ssh para conectarse a su computadora y usar powershell full interactive. Vim, edit, emacs o lo que sea que use para editar un archivo va a funcionar sin ningún problema.

Te animo a que no pierdas tu tiempo con psremoting, telnet, winrs, psexec, tratando de lograr lo que proporciona un shell interactivo real (ya lo perdí, T_T). Pruebe ese servidor ssh y vea por usted mismo.


Primero, cree una carpeta temporal en la máquina local (LOCALTEMPFOLDER). Luego, usa la siguiente función:

function vimrem {param([parameter(position=0,mandatory=$true)][string]$Session, [parameter(position=1,mandatory=$true)][string]$Path) $TempFile = split-path -path $Path -leaf copy-item -fromsession $Session -path $Path -destination LOCALTEMPFOLDER/$TempFile vim $LOCALTEMPFOLDER/$TempFile copy-item -tosession $Session -path LOCALTEMPFOLDER/$TempFile -destination $Path remove-item -path LOCALTEMPFOLDER/$TempFile }

Esto debería funcionar, pero tendrá que abandonar una sesión interactiva antes de usar esta función.


Pruébelo usando un editor basado en consola como VI o Emacs. Como en mi comentario, creo que el problema es que el comando de edición está vinculado a una aplicación de ventana que, a su vez, no está virtualizada en una sesión remota.


Si está utilizando Powershell 5, puede usar el comando llamado PSEdit. Solo funciona desde ISE.

  1. Primero, abra PowerShell ISE
  2. A continuación, abra la sesión remota en la computadora remota con Enter-PSSession
  3. Luego edite el archivo usando PsEdit ''filename''

El archivo remoto se abrirá en una nueva pestaña en su ventana ISE (local).

De hecho, encontré esta respuesta en la sección de comentarios de esta pregunta SO , pero creo que será útil para otros si la publico como respuesta aquí.


PowerShell_ISE.exe //REMOTE/File.txt

cargará y editará el archivo directamente y lo guardará de nuevo en la computadora remota en un solo paso y, desde su línea de comando, fácil de construir funciones usándolo. No se da problemas para compartir, pero la forma más fácil que he encontrado.