Je me connecte à un autre ordinateur à l'aide de la télécommande à distance, vraiment sympa. peut faire beaucoup, mais comment éditer un fichier?
PS C:\Users\guutlee> Enter-PSSession -ComputerName appprod
[appprod]: PS C:\Users\guutlee\Documents> cd\myapp
[appprod]: PS C:\myapp>
que puis-je faire pour ouvrir un éditeur de fichiers sur un fichier sur la machine distante?
[appprod]: PS C:\myapp> modifier app.config
donc modifier "nom de fichier" semble juste se bloquer, à partir de powershell.exe ou de powershell_ise.exe
La seule chose à laquelle je peux penser est de sortir de la session et de "démarrer\webprod\c $\inetpub\myapp\web.config", ce qui ouvrirait Visual Studio.
[appprod]: PS C:\myapp> exit
PS C:\Users\guutlee> démarrer\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
Bien sûr, je dois retrouver le fichier, espérer que le partage c $ est disponible et accessible, puis reconnecter ma session et retrouver mon répertoire de travail quand je veux continuer. Cela ne semble pas très élégant.
Je pourrais peut-être envelopper c'est une fonction, mais avoir du mal à envelopper ma tête autour de cela ..
alors, comment puis-je facilement modifier un fichier avec une session à distance?
ÉDITER
le message de kbrimington m'a fait penser à l'option -X de ssh. ce serait probablement génial pour les sessions PowerShell de pouvoir retransmettre des applications fenêtrées à l'environnement de fenêtrage d'origine ...
mais je serais quand même content de modifier le fichier.
ÉDITER
tests utilisant vi, emacs, cmd et edit
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: l'entrée standard n'est pas un tty
+ CategoryInfo \: NotSpecified: (emacs: standard input is not a tty:String) [], RemoteException + FullyQualifiedErrorId \: NativeCommandError
[appprod]: PS C:\Users\guutlee\Documents> cmd
Microsoft Windows [version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. Tous les droits sont réservés.
C:\Users\guutlee\Documents>
[appprod]: PS C:\Users\guutlee\Documents> modifier le nom de fichier.txt
vi et éditer le blocage (Control-C pour récupérer une invite)
cmd s'exécute, produisant une invite, mais revient immédiatement à l'invite PowerShell
emacs produit l'erreur (l'entrée standard n'est pas un tty)
ÉDITER
Jered suggère de retirer le fichier localement pour le modifier. J'ai embelli sa réponse à la copie en utilisant des sessions plutôt que des UNC (c'est peut-être ce qu'il voulait)
PS C:\Users\Meredith> Invoke-Command -Session $ ps -ScriptBlock {get-content c: /inetpub/myapp/web.config}> web.config
modifier la configuration Web
PS C:\Users\Meredith> get-content web.config | Invoke-Command -Session $ ps -ScriptBlock {set-content c: /inetpub/myapp/web.config}
Nous pourrions potentiellement exécuter les commandes invoke dans les deux sens, local vers distant ou distant vers local.
Si vous utilisez Powershell 5, vous pouvez utiliser la commande appelée PSEdit. Cela ne fonctionne que depuis ISE.
Le fichier distant sera ouvert dans un nouvel onglet dans votre fenêtre ISE (locale).
En fait, j'ai trouvé cette réponse dans la section des commentaires de cette SO question , mais je pense que cela sera utile pour les autres si je la poste comme réponse ici.
Vous ne pouvez pas extraire le fichier localement, le modifier et le publier? Je sais que c'est fastidieux et pas élégant, mais il semble que les éditeurs rencontrent actuellement des problèmes avec les sessions à distance.
Par exemple.,
Get-Content REMOTE\Filename.txt > LOCAL\Filename.txt
Apportez vos modifications localement, puis
Set-Content -path REMOTE\Filename.txt -value (get-content LOCAL\Filename.txt)
ÉDITER
De plus, 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
Après avoir beaucoup fouillé, j'ai trouvé quelque chose qui semble pertinent dans la documentation d'aide de powershell. À l'invite PowerShell, tapez:
aide about_remote_troubleshooting
À la toute fin du fichier d'aide qui s'affiche, il y a une section intitulée "DÉPANNAGE DES COMPORTEMENTS NON RESPONSABLES", qui indique:
DÉPANNAGE DES COMPORTEMENTS NON RESPONSABLES
Cette section traite des problèmes d'accès distant qui empêchent l'exécution d'une commande et empêchent ou retardent le retour de l'invite Windows PowerShell.
COMMENT INTERROMPRE UNE COMMANDE
Certains programmes Windows natifs, tels que les programmes avec une interface utilisateur, les applications de console qui demandent une entrée et les applications de console qui utilisent l'API de console Win32, ne fonctionnent pas correctement dans l'hôte distant Windows PowerShell.
Lorsque vous utilisez ces programmes, vous pouvez voir un comportement inattendu, comme aucune sortie, une sortie partielle ou une commande à distance qui ne se termine pas. Pour mettre fin à un programme qui ne répond pas, tapez CTRL + C. Pour afficher les erreurs qui auraient pu être signalées, tapez "$ error" dans l'hôte local et la session distante.
Ainsi, il semblerait que même les applications de console non GUI telles que VIM ne fonctionnera malheureusement pas. Quiconque souhaite éclairer un peu pourquoi cela pourrait être le cas et/ou s'il peut être travaillé J'adorerais VRAIMENT si je pouvais utiliser vim sur la télécommande à distance.
Créez d'abord un dossier temporaire sur la machine locale (LOCALTEMPFOLDER). Utilisez ensuite 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.
PowerShell_ISE.exe \\REMOTE\...\File.txt
chargera et éditera directement le fichier et l'enregistrera sur l'ordinateur distant en une seule étape et, depuis sa ligne de commande, il sera facile de créer des fonctions en l'utilisant. Ne contourne pas les problèmes de partage, mais le moyen le plus simple que j'ai trouvé.
J'essaie toutes les suggestions ci-dessus et même d'autres solutions liées à Microsoft, mais aucune ne fonctionne comme vous et moi - "Shell interactif et réactif" -. Si vous voulez vraiment avoir l'expérience ssh que les utilisateurs d'Unix ont depuis le début, je vous recommande d'installer un serveur ssh. J'utilise personnellement freesshd, vous pouvez le trouver ici http://www.freesshd.com et des 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, il vous suffit d'utiliser n'importe quelle application cliente ssh pour vous connecter à votre ordinateur et utiliser powershell full interactive. Vim, edit, emacs ou tout ce que vous utilisez pour éditer un fichier fonctionnera sans aucun problème.
je vous encourage à ne pas perdre votre temps avec psremoting, telnet, winrs, psexec, en essayant de réaliser ce qu'un véritable shell interactif fournit (je l'ai déjà perdu, T_T). Essayez ce serveur ssh et voyez par vous-même.
Essayez-le à l'aide d'un éditeur basé sur une console tel que VI ou Emacs. Comme dans mon commentaire, je pense que le problème est que la commande d'édition est liée à une application fenêtrée qui, à son tour, n'est pas virtualisée sur une session distante.
J'ai obtenu que nano fonctionne facilement via SSH vers PowerShell. Il est disponible en Chocolatey donc vous pouvez simplement faire ...
choco install nano -y
Ensuite, vous pouvez simplement faire ...
nano filename