как редактировать файл в сеансе удаленного взаимодействия powershell (powershell) - PullRequest
33 голосов
/ 08 августа 2010

Я подключаюсь к другому компьютеру, используя удаленное взаимодействие PowerShell, очень приятно.может многое, но как мне отредактировать файл?

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

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

[appprod]: PS C: \ myapp>

что я могу сделать дляоткрыть редактор файлов на файл на удаленной машине?

[appprod]: PS C: \ myapp> редактировать app.config

, поэтому редактирование «имени файла» кажется просто зависшим, от powershell.exe или от powershell_ise.exe

Единственное, что я могу вспомнить, это вернуться из pssession и "start \ webprod \ c $ \ inetpub \ myapp \ web.config", который откроет 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

Конечно, с этим я должен повторнонайти файл, надеяться, что общий ресурс c $ доступен и доступен, и заново подключить мою pssession и заново найти мой рабочий каталог, когда я захочу продолжить.Кажется, это не очень элегантно.

Я мог бы обернуть это функцией, но мне трудно обдумать это ..

так как мне удобно редактировать файл с помощьюудаленный pssession?

EDIT

Пост kbrimington заставил меня задуматься о опции -X для ssh.Вероятно, для сеансов PowerShell было бы здорово перенаправить оконные приложения обратно в исходную оконную среду ...

, но все же я был бы рад просто отредактировать файл.

EDIT

тестирует с использованием vi, emacs, cmd и редактирует

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 \Документы> C: \ emacs-23.2 \ bin \ emacs.exe -nw filename.txt

emacs.exe: emacs: стандартный ввод не является tty

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

+ FullyQualifiedErrorId \: NativeCommandError

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

Microsoft Windows [версия 6.1.7600]

Copyright (c) 2009 Microsoft Corporation,Все права защищены.

C: \ Users \ guutlee \ Documents>

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

vi и редактирование зависания (Control-C возвращает запрос)

cmd запускается, генерируя приглашение, но сразу же возвращается к приглашению powershell

emacsвыдает ошибку (стандартный ввод не tty)

РЕДАКТИРОВАТЬ

Jered предлагает вытянуть файл обратно локально для редактирования.Я украсил его ответ на копирование, используя pssessions, а не UNC (возможно, именно это он и имел в виду)

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

редактировать веб-конфигурацию

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

Потенциально мы можем запускать команды invoke в любом направлении, локальном дляудаленный или удаленный обратно на локальный.

Ответы [ 8 ]

21 голосов
/ 11 марта 2016

Если вы используете Powershell 5, вы можете использовать команду PSEdit.Это работает только от ISE.

  1. Итак, сначала откройте PowerShell ISE
  2. Затем откройте удаленный сеанс на удаленном компьютере с помощью Enter-PSSession
  3. Затем отредактируйте файл с помощьюPsEdit 'filename'

Удаленный файл будет открыт в новой вкладке в вашем (локальном) окне ISE.

На самом деле я нашел этот ответ в разделе комментариев этот ТАК вопрос , но я думаю, что для других будет полезно, если я опубликую его здесь как ответ.

4 голосов
/ 24 сентября 2011

После долгих размышлений я нашел что-то уместное в справочной документации powershell. В командной строке powershell введите:

помощь по устранению проблем

В самом конце файла справки, который отображается, есть раздел, озаглавленный «УСТРАНЕНИЕ НЕИСПРАВНОСТЕЙ НЕАКТИВНОГО ПОВЕДЕНИЯ», в котором говорится:

УСТРАНЕНИЕ НЕИСПРАВНОСТЕЙ НЕАБИЛЬНОГО ПОВЕДЕНИЯ

В этом разделе рассматриваются проблемы удаленного взаимодействия, которые мешают команде завершение и предотвращение или задержка возврата Windows PowerShell проворная.

КАК ПРЕРЫВАТЬ КОМАНДУ


Некоторые родные программы для Windows, такие как программы с пользовательским интерфейсом, консольные приложения, которые запрашивают ввод, и консоль приложения, использующие консольный API Win32, не работают правильно в удаленном хосте Windows PowerShell.

Когда вы используете эти программы, вы можете увидеть неожиданное поведение, такое как как отсутствие вывода, частичный вывод или удаленная команда, которая не полный. Чтобы завершить неотвечающую программу, нажмите CTRL + C. Чтобы просмотреть любой ошибки, о которых можно было бы сообщить, введите «$ error» в локальный хост и удаленный сеанс.

Таким образом, может показаться, что даже консольные приложения без графического интерфейса, такие как VIM, не будут работать, к сожалению. Кто-нибудь чтобы пролить немного света на то, почему это может иметь место и / или можно ли это сделать вокруг? Мне бы ДЕЙСТВИТЕЛЬНО понравилось бы, если бы я мог использовать vim вместо удаленного взаимодействия с PowerShell.

4 голосов
/ 17 августа 2010

Вы не можете вытащить файл локально, отредактировать его и опубликовать? Я знаю, что это утомительно и не элегантно, но кажется, что редакторы в настоящее время имеют проблемы с удаленными сеансами.

например.,

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

Внесите изменения локально, а затем

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

EDIT

Также, если вы заменяете только определенные экземпляры, вы можете сделать это довольно легко.

например.,

Get-Content REMOTE\Filename.txt | foreach-object { $_ -replace "OLD", "NEW" } | Set-Content REMOTE\Filename.txt
3 голосов
/ 13 февраля 2018

Сначала создайте временную папку на локальном компьютере (LOCALTEMPFOLDER). Затем используйте следующую функцию:

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

}

Это должно работать, но перед использованием этой функции вам придется покинуть интерактивный сеанс.

3 голосов
/ 21 января 2012
PowerShell_ISE.exe \\REMOTE\...\File.txt 

загрузит и отредактирует файл напрямую и сохранит его обратно на удаленном компьютере за один шаг, а благодаря командной строке легко создавать функции, используя его.Не обходит проблемы обмена, но самый простой способ, который я нашел.

1 голос
/ 15 марта 2011

Я пробую все вышеупомянутое предложение и даже другое решение, связанное с Microsoft, но ни одно из них не работает так, как вы и я - "полностью интерактивная и отзывчивая оболочка" -.Если вы действительно хотите иметь опыт работы с ssh, который есть у пользователей unix с самого начала, я рекомендую вам установить ssh-сервер.Я лично использую freesshd, вы можете найти его здесь http://www.freesshd.com и инструкции по его настройке здесь http://www.windowsnetworking.com/articles_tutorials/install-SSH-Server-Windows-Server-2008.html. После того, как вы сделаете все, что сказано в инструкциях, вам нужно только использовать любое клиентское приложение ssh дляподключиться к компьютеру и использовать PowerShell полностью интерактивно.Vim, edit, emacs или все, что вы используете для редактирования файла, будет работать без проблем.

Я призываю вас не тратить свое время на psremoting, telnet, winrs, psexec, пытаясь достичь того, что реальноПредоставить интерактивную оболочку (я ее уже потерял, T_T).Попробуйте этот ssh-сервер и убедитесь сами.

1 голос
/ 08 августа 2010

Попробуйте, используя консольный редактор, такой как VI или Emacs.Как и в моем комментарии, я думаю, что проблема в том, что команда edit привязана к оконному приложению, которое, в свою очередь, не виртуализируется в удаленном сеансе.

0 голосов
/ 04 марта 2017

Я заставил nano легко работать с SSH на PowerShell. Он доступен в шоколаде, так что вы можете просто ...

choco install nano -y

Тогда вы можете просто сделать ...

nano filename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...