2010-08-08 26 views
30

Me estoy conectando a otra computadora usando Powershell Remoting, realmente agradable. puedo hacer muchas cosas, pero ¿cómo puedo editar un archivo?cómo editar un archivo en la sesión remota de powershell (powershell)

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

[appprod]: PS C: \ Users \ guutlee \ Documentos>cd \ miaplicacion

[ appprod]: PS C: \ myapp>

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

[appprod]: PS C: \ miaplicacion> editar app.config

modo de edición "nombre de archivo" sólo parece colgar, desde powershell.exe o desde powershell_ise.exe

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

[appprod]: PS C: \ miaplicacion> salida

PS C: \ Users \ guutlee>inicio \ agobuild \ c $ \ miaplicacion \ app.config

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

[appprod]: PS C: \ Users \ guutlee \ Documentos>cd \ miaplicacion

[appprod]: PS C: \ miaplicacion>myapp.exe

Por supuesto, con esto tengo que volver a encontrar el archivo, espero que el recurso compartido C $ está disponible y accesible, y la reconexión mi sesión y volver a encontrar mi directorio de trabajo cuando quiero continuar. No parece muy elegante.

tal vez podría envolver esta es una función, pero teniendo dificultades para envolver mi cabeza alrededor de eso ..

Entonces, ¿cómo convenientemente editar un archivo con un pssession remoto?

EDITAR

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

pero aún así me gustaría simplemente editar el archivo.

EDIT

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: entrada estándar no es una tty

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

+ FullyQualifiedErrorId \: NativeCommandError 

[appprod]: PS C: \ Users \ guutlee \ Documentos> cmd

Microsoft Windows [Versión 6.1.7600]

copyright (C) 2009 Microsoft Corporation. Todos los derechos reservados.

C: \ Users \ guutlee \ Documentos>

[appprod]: PS C: \ Users \ guutlee \ Documentos>edición filename.txt

vi y editar colgar (Control- C para obtener una pronta vuelta)

carreras cmd, produciendo un aviso, pero inmediatamente sale de nuevo a la línea de PowerShell

emacs produce el error (entrada estándar no es una TTY)

EDITAR

Jered sugiere tirando el archivo de nuevo localmente para editar. Embellecí su respuesta a copiar utilizando PSSessions en lugar de UNC (tal vez esto es lo que pretendía)

PS C: \ Users \ Meredith>Invoke-Command -Sesión $ ps -ScriptBlock {get-content c:/inetpub/miaplicacion/web.config}> web.config

edición web config

PS C: \ Users \ Meredith>web.config get-content | Invoke-Command -Sesión $ ps -ScriptBlock {set-contenido de c: /inetpub/myapp/web.config}

Potencialmente podría ejecutar los comandos de invocación en cualquier dirección, locales a distancia o control remoto de nuevo a local.

+0

Esto no responde cómo editar convenientemente un archivo, pero es una explicación del comportamiento de colgado, por lo que lo publicaré como un comentario. Parece que su sesión se cuelga porque una sesión remota no virtualizará las aplicaciones con ventana para usted; es decir, su sesión de edición sería visible para usted en el Escritorio remoto si estuviera conectado a través de servicios de terminal. – kbrimington

+0

no funcionará muy bien con las aplicaciones de consola interactiva. – x0n

Respuesta

1

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.

+0

Creo que edit.com es el editor de consola y no una aplicación de ventana . Instalé emacs, (bueno, ya tenía instalado emacs, tratando de escapar de mis raíces de UNIX con powershell :)). esta es la salida > [appprod]: PS C: \ emacs-23.2>. \ bin \ emacs.exe -nw. \ README.W32 > emacs.exe: emacs: la entrada estándar no es una tty > + CategoryInfo: NotSpecified: (emacs: la entrada estándar no es un tty: String) [ >], RemoteException > + FullyQualifiedErrorId: NativeCommandError – guutlee

+0

Bummer. ¿VI te lleva a algún lado? Puedo ejecutar 'cmd' desde una sesión remota, por lo que quizás era demasiado optimista para que otras aplicaciones de consola funcionaran de la misma manera. – kbrimington

+0

Ejecuto cmd desde una sesión remota, se ejecutó, pero de inmediato se devolvió a powershell. ¿Es este comportamiento diferente el que estás viendo? Intenté vi, colgó como lo hizo edit. mi prueba se resume arriba. – guutlee

3

¿No se puede 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.

por ejemplo,

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

Haga sus cambios localmente y luego

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

EDITAR

Además, si sólo se está reemplazando ciertos casos usted puede hacer esto con bastante facilidad.

por ejemplo,

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

Una buena alternativa a mi idea inicial de abrir un editor local en un recurso compartido remoto. Pero revierte la dependencia al usar copy en un recurso compartido local y luego de nuevo en el editor local, y una copia de regreso a la ubicación original. Realmente me gustaría perder la dependencia de un recurso compartido de archivos para poder exponer solo winrm y no servicios adicionales. – guutlee

+0

¿Qué tipo de edición estás haciendo? ¿Sigue un patrón? –

+0

Principalmente ad-hoc, supongo; tal vez agregar un párrafo de texto a un archivo html; tal vez actualizar una cadena de conexión en una aplicación web; quizás cambiando un script de powershell para agregar alguna funcionalidad. – guutlee

0

Intento toda la sugerencia anterior e incluso otra solución relacionada Microsoft pero ninguno funciona como usted y yo quiero - "lleno shell interactivo y sensible" -. Si realmente quieres tener la experiencia ssh que los usuarios de Unix tienen desde el principio, te recomiendo que instales un servidor ssh. Yo personalmente uso freesshd, puedes 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 el 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.

+0

Las sesiones de Powershell están diseñadas para ser apátridas, nunca debieron estar "llenas" caparazón interactivo y sensible '. Hay ventajas para * nix shells y powershell, y esta es una de las desventajas. Dicho esto, ha habido algunas buenas sugerencias sobre cómo evitarlo. –

3

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 'SOLUCIÓN DE COMPORTAMIENTO NO RESPONDE', que establece:

SOLUCIÓN dE COMPORTAMIENTO NO RESPONDE

en esta sección se abordan los problemas de comunicación remota que impiden un comando desde completar y evitar o retrasar la devolución de la solicitud de Windows PowerShell .

cómo interrumpir UN COMANDO


Algunos programas nativos de Windows, tales como programas con una interfaz de usuario, aplicaciones de consola que se solicitan datos, y la consola aplicaciones que utilizan la API de consola Win32, no lo hacen trabaje correctamente en el host remoto de Windows PowerShell.

Cuando utiliza estos programas, es posible que observe un comportamiento inesperado, como como sin salida, salida parcial o un comando remoto que no completa . Para finalizar un programa que no responde, escriba CTRL + C.Para ver los errores que pudieron haber sido informados, escriba "$ error" en el host local y la sesión remota.

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

+2

Puedo arrojar algo de luz sobre por qué: Console IO en Windows está más cerca de realizar ioctls en un dispositivo (señalización fuera de banda) que de códigos de control de transmisión. Eche un vistazo a cómo está estructurada la API en http://msdn.microsoft.com/en-us/library/windows/desktop/ms682088%28v=vs.85%29.aspx. Contraste esto con cómo funciona, por ejemplo, la emulación VT100 (secuencias de escape integradas en banda). PowerShell funciona de forma continua para E/S y no en una consola. – user314104

1
PowerShell_ISE.exe \\REMOTE\File.txt 

se cargará y editar el archivo directamente y volver a guardarlo en el ordenador remoto en un solo paso y, desde su línea de comandos, fácil de construir funciones de usarlo. No se da problemas para compartir, pero la forma más fácil que he encontrado.

14

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

  1. Así que, primero, abrir PowerShell ISE
  2. A continuación, abra la sesión remota al ordenador remoto a través de Enter-PSSession
  3. A continuación, edite el archivo con PsEdit 'nombre'

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

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

-1

Tengo nano para trabajar fácilmente a través de SSH a PowerShell. Está disponible en Chocolatey lo que sólo puede hacer ...

choco install nano -y 

continuación, sólo puede hacer ...

nano filename 
0

En primer lugar, crear una carpeta temporal en la máquina local (LOCALTEMPFOLDER). A continuación, utilice 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.

+1

No es necesario que formule preguntas de ejemplo antes de su respuesta. Solo la respuesta y cualquier explicación que la acompañe. – AfroThundr

Cuestiones relacionadas