comment modifier un fichier dans powershell remoting session (powershell)
je me connecte à un autre ordinateur en utilisant powershell remoting, really nice. peut faire beaucoup, mais comment puis-je modifier un fichier?
PS C:Usersguutlee > Enter-PSSession-ComputerName appprod
[appprod]: PS C:UsersguutleeDocuments > cd myapp
[appprod]: PS C:myapp 151920920"
que puis-je faire pour ouvrir un fichier Editeur d'un fichier sur la machine distante?
[appprod]: PS C:myapp > edit app.config
donc éditer "nom de fichier" semble juste pendre, de powershell.exe ou de powershell_ise.exe
la seule chose à laquelle je peux penser est de revenir de la pssession et" start webprodc$inetpubmyappweb.config", qui ouvrirait visual studio.
[appprod]: PS C:myapp > sortie
PS C:Usersguutlee > start agobuildc$myappapp.config
PS C:Usersguutlee > Enter-PSSession-ComputerName appprod
[appprod]: PS C:UsersguutleeDocuments > cd myapp
[appprod]: PS C:myapp > myapp.exe
bien sûr avec ceci j'ai pour retrouver le fichier, j'espère que le partage c$ est disponible et accessible, et que je retrouve mon répertoire de travail quand je veux continuer. Il ne semble pas très élégant.
je pourrais peut-être envelopper ceci est une fonction, mais avoir du mal à envelopper ma tête autour de cela..
alors comment éditer commodément un fichier avec une PSSession distante?
EDIT
le billet de kbrimington m'a fait penser à propos de l'option-X de ssh. ce serait probablement quelque chose de génial pour powershell sessions pour être en mesure de transférer les applications fenêtrées de retour à l'environnement de fenêtrage d'origine...
mais je serais quand même heureux de simplement éditer le fichier.
EDIT
tests utilisant vi, emacs, cmd et edit
PS C:UsersMeredith > Enter-PSSession-ComputerName appprod
[appprod]: PS C:UsersguutleeDocuments > C:vimvim72vim nom du fichier.txt
[appprod]: PS C:UsersguutleeDocuments > C:emacs-23.2binemacs.nom du fichier exe-nw.txt
emacs.exe: emacs: entrée standard n'est pas un tty
+ CategoryInfo : NotSpecified: (emacs: standard input is not a tty:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError
[appprod]: PS C:UsersguutleeDocuments > cmd
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. Tous droits réservés.
C:UsersguutleeDocuments 151920920"
[appprod]: PS C:UsersguutleeDocuments > edit filename.txt
vi et de modifier accrocher (Contrôle-C pour obtenir une invite dos)
cmd fonctionne, produisant une invite, mais sort immédiatement de nouveau à l'invite powershell
emacs produit l'erreur (entrée standard n'est pas un tty)
EDIT
Jered suggère de retirer le fichier localement pour le modifier. J'ai embelli sa réponse à la copie à l'aide de sessions pssession plutôt que de l'Unc (c'est peut-être ce qu'il voulait)
PS C:UsersMeredith > Invoke-Command-Session $ps-ScriptBlock {get-content c:/inetpub/myapp/web.config} > web.config
modifier la configuration web de
PS C:UsersMeredith > get-content web.config / Invoke-Command-Session $ps-ScriptBlock {set-content c:/inetpub/myapp/web.config}
potentiellement, nous pourrions exécuter les commandes invoke-dans l'une ou l'autre direction, local à distant ou remote back to local.
8 réponses
si vous utilisez Powershell 5, vous pouvez utiliser la commande PSEdit. Il ne fonctionne qu'à partir d'ISE.
- Alors d'abord, ouvrez PowerShell ISE
- puis ouvrir la session distante à L'ordinateur distant en utilisant Enter-PSSession
- puis éditez le fichier en utilisant PsEdit 'filename'
le fichier distant sera ouvert dans un nouvel onglet dans votre fenêtre (locale) ISE.
en fait j'ai trouvé ceci réponse de la section des commentaires de cette question SO , mais je pense qu'il sera utile pour d'autres si je poste comme réponse ici.
après beaucoup de recherches, j'ai trouvé quelque chose qui semble pertinent dans la documentation d'aide de powershell. À l'invite powershell, tapez:
aide sur_remote_troubleshooting
à la toute fin du fichier d'aide affiché, il y a une section intitulée "dépannage du comportement non réactif", qui se lit comme suit:
DÉPANNAGE COMPORTEMENT NON RÉACTIF
cette section traite des problèmes de remotting qui empêchent une commande de compléter et prévenir ou retarder le retour de la PowerShell Windows invite.
COMMENT INTERROMPRE UNE COMMANDE
certains programmes Windows natifs, tels que les programmes avec une interface utilisateur, les applications de la console qui demandent une entrée, et la console les applications qui utilisent L'API de console Win32, ne fonctionnent pas correctement dans la machine distante PowerShell de Windows.
lorsque vous utilisez ces programmes, vous pourriez voir un comportement inattendu, tel que comme aucune sortie, sortie partielle, ou une commande à distance qui ne compléter. Pour mettre fin à un programme sans réponse, tapez CTRL + C. erreurs qui auraient pu être signalées, tapez "$ error " dans la hôte local et la session à distance.
ainsi, il semblerait même non-GUI console applications telles que VIM ne fonctionne pas malheureusement. Quiconque prendre soin d'apporter un peu de lumière sur la raison pour laquelle cela pourrait être le cas et / ou si cela peut être travaillé autour? J'aimerais vraiment si je pouvais utiliser vim sur powershell remoting.
ne pouvez-vous pas extraire le fichier localement, l'éditer et le poster? Je sais que c'est fastidieux et pas Élégant, mais il semble que les éditeurs aient actuellement des problèmes avec les sessions à distance.
par exemple,
Get-Content REMOTE\Filename.txt > LOCAL\Filename.txt
faites vos modifications localement et puis
Set-Content -path REMOTE\Filename.txt -value (get-content LOCAL\Filename.txt)
EDIT
aussi si vous ne remplacez que certaines instances, vous pouvez le faire assez facilement.
par exemple,
Get-Content REMOTE\Filename.txt | foreach-object { $_ -replace "OLD", "NEW" } | Set-Content REMOTE\Filename.txt
PowerShell_ISE.exe \REMOTE\...\File.txt
chargera et éditera le fichier directement et le sauvera de nouveau à l'ordinateur distant en une seule étape et, depuis sa ligne de commande, facile à construire des fonctions l'utilisant. On ne partage pas les problèmes, mais j'ai trouvé la façon la plus facile.
essayez-le en utilisant un éditeur basé sur la console tel que VI ou Emacs. Comme dans mon commentaire, je pense que le problème est que la commande edit est liée à une application fenêtrée qui, à son tour, n'est pas virtualisée à travers une session distante.
tout d'abord, créez un dossier temp sur la machine locale (LOCALTEMPFOLDER). Ensuite, utilisez la fonction suivante:
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
}
cela devrait fonctionner, mais vous devrez quitter une session interactive avant d'utiliser cette fonction.
j'essaie toutes les suggestions ci-dessus et même une autre solution liée à microsoft mais aucune ne fonctionne comme vous et moi le voulons --"full interactive and responsive shell"--. Si vous voulez vraiment avoir l'expérience SSH que les utilisateurs d'unix ont depuis le début du temps, je vous recommande d'installer un serveur SSH. J'utilise personnellement freesshd, vous pouvez le trouver ici http://www.freesshd.com et instructions pour le configurer ici http://www.windowsnetworking.com/articles_tutorials/install-SSH-Server-Windows-Server-2008.html . Après avoir fait tout ce qui est indiqué dans les instructions, vous n'avez qu'à utiliser n'importe quelle application client ssh pour vous connecter à votre ordinateur et utiliser powershell full interactive. Vim, edit, emacs ou tout ce que vous utilisez pour éditer un fichier va fonctionner sans aucun problème.
je vous encourage à ne pas perdre votre temps avec psremoting, telnet, winrs, psexec, en essayant d'atteindre ce qu'un réel shell interactif fournir (Je l'ai déjà perdu, T_T). Essayez ce serveur ssh un see pour vous-même.
j'ai fait travailler nano facilement de SSH à PowerShell. Il est disponible en Chocolatey donc vous pouvez le faire...
choco install nano -y
alors vous pouvez le faire...
nano filename