programing

powershell 원격 세션에서 파일을 편집하는 방법(powershell)

iphone6s 2023. 8. 20. 10:32
반응형

powershell 원격 세션에서 파일을 편집하는 방법(powershell)

파워셸 리모트를 사용하여 다른 컴퓨터에 연결하고 있습니다. 정말 좋습니다. 많은 것을 할 수 있지만 파일을 편집하려면 어떻게 해야 합니까?

PSC:\Users\guutlee> Enter-PSSession - ComputerName appprod

[appprod]:PSC:\Users\guutlee\Documents > cd \myapp

[appprod]:PSC:\myapp>

원격 컴퓨터의 파일에서 파일 편집기를 열려면 어떻게 해야 합니까?

[appprod]:PSC:\myapp> app.config 편집

따라서 powershell.exe 또는 powershell_ise.exe에서 "filename"을 편집하면 중단되는 것처럼 보입니다.

제가 생각할 수 있는 유일한 것은 pession에서 다시 나와 "start \webprod\c$\inetpub\myapp\web.config"로 비주얼 스튜디오를 여는 것입니다.

[appprod]:PSC:\myapp> 종료

PSC:\Users\guutlee> 시작 \agobuild\c$\myapp\app.config

PSC:\Users\guutlee> Enter-PSSession - ComputerName appprod

[appprod]:PSC:\Users\guutlee\Documents > cd \myapp

[appprod]:PSC:\myapp> myapp.exe

물론 이것으로 저는 파일을 다시 찾아야 하고, c$ 공유가 사용 가능하고 액세스할 수 있기를 바라며, 계속하고 싶을 때 제 세션을 다시 연결하고 제 작업 디렉토리를 다시 찾아야 합니다.별로 우아해 보이지 않습니다.

제가 이것을 감쌀 수는 있지만, 머리를 감는 것은 어렵습니다.

원격으로 파일을 편리하게 편집하려면 어떻게 해야 합니까?

편집

kbrimington의 게시물은 저에게 ssh에 대한 -X 옵션에 대해 생각하게 했습니다. 파워셸 세션에서 윈도우 설정된 앱을 원래 윈도우 설정 환경으로 포워드 할 수 있는 것은 멋진 일일 것입니다.

그래도 파일을 편집하는 것만으로도 행복합니다.

편집

vi, emacs, cmd 및 편집을 사용한 테스트

PSC:\Users\Meredith> Enter-PSSession - ComputerName appprod

[appprod]:PSC:\Users\guutlee\Documents > C:\vim\vim72\vim filename.txt

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

emacs.exe : emacs: 표준 입력이 tatty가 아닙니다.

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

+ FullyQualifiedErrorId \: NativeCommandError

[appprod]:PSC:\Users\guutlee\문서 > cmd

Microsoft Windows [버전 6.1.7600]

Copyright (c) 2009 Microsoft Corporation.무단 전재 금지.

C:\Users\guutlee\문서>

[appprod]:PSC:\Users\guutlee\Documents > filename.txt 편집

vi 및 edit hang(제어-C를 사용하여 프롬프트를 반환함)

cmd가 실행되어 프롬프트가 생성되지만 즉시 전원 셸 프롬프트로 돌아갑니다.

emacs는 오류를 생성합니다(표준 입력이 Atty가 아님).

편집

Jered는 편집할 파일을 로컬로 다시 가져올 것을 제안합니다.나는 UNC가 아닌 pssessions를 사용하여 복사에 대한 그의 대답을 장식했습니다(아마도 이것이 그가 의도한 것일 것입니다).

PSC:\Users\Meredith> 호출 - 명령 - 세션 $ps - 스크립트 블록 {get-content c:/inetpub/myapp/web.config} > web.config

웹 구성 편집

PSC:\Users\Meredith> get-content web.config | 호출 - 명령 - 세션 $ps - 스크립트 블록 {set-content c:/inetpub/myapp/web.config}

잠재적으로 로컬에서 원격으로 또는 원격에서 로컬로 호출 명령을 실행할 수 있습니다.

Powershell 5를 사용하는 경우 PSEdit라는 명령을 사용할 수 있습니다.ISE에서만 작동합니다.

  1. 먼저 PowerShell ISE를 엽니다.
  2. 그런 다음 Enter-PSession을 사용하여 원격 컴퓨터에 대한 원격 세션을 엽니다.
  3. 그런 다음 PsEdit 'filename'을 사용하여 파일을 편집합니다.

원격 파일이 (로컬) ISE 창의 새 탭에서 열립니다.

사실 이 SO 질문의 댓글 부분에서 이 답을 찾았는데, 여기에 답으로 올리면 다른 사람들에게 도움이 될 것 같습니다.

파일을 로컬로 풀어서 편집하고 게시할 수 없습니까?이것이 지루하고 우아하지 않다는 것을 알지만 편집자들이 현재 원격 세션에 문제가 있는 것 같습니다.

예.,

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

로컬에서 변경한 다음

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

편집

또한 특정 인스턴스만 교체하는 경우에는 이 작업을 매우 쉽게 수행할 수 있습니다.

예.,

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

자세히 살펴본 결과 파워셸 도움말 문서에 관련이 있는 것으로 보이는 것을 발견했습니다.전원 셸 프롬프트에서 다음을 입력합니다.

도움말_원격_문제 해결

표시되는 도움말 파일의 맨 끝에는 '응답 없음 동작 문제 해결' 섹션이 있으며, 여기에는 다음과 같은 내용이 포함됩니다.

응답하지 않는 동작 문제 해결

이 섹션에서는 명령을 완료하지 못하고 Windows PowerShell 프롬프트가 반환되지 않거나 지연되는 원격 문제에 대해 설명합니다.

명령을 중단하는 방법


사용자 인터페이스가 있는 프로그램, 입력을 요청하는 콘솔 응용 프로그램 및 Win32 콘솔 API를 사용하는 콘솔 응용 프로그램과 같은 일부 기본 윈도우즈 프로그램은 윈도우즈 PowerShell 원격 호스트에서 올바르게 작동하지 않습니다.

이러한 프로그램을 사용할 때 출력이 없거나 부분적으로 출력되거나 원격 명령이 완료되지 않는 등의 예기치 않은 동작이 나타날 수 있습니다.응답하지 않는 프로그램을 종료하려면 CTRL + C를 입력합니다.보고된 오류를 보려면 로컬 호스트와 원격 세션에 "$error"를 입력합니다.

따라서 VIM과 같은 비GUI 콘솔 애플리케이션도 아쉽게도 작동하지 않을 것으로 보입니다.이러한 상황이 왜 발생하는지, 그리고/또는 해결할 수 있는지에 대해 설명할 사람이 있습니까?vim over powershell remote를 사용할 수 있다면 정말 좋을 것 같습니다.

먼저 로컬 시스템(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

}

이 기능은 작동하지만 이 기능을 사용하기 전에 대화형 세션을 종료해야 합니다.

PowerShell_ISE.exe \\REMOTE\...\File.txt 

에서는 파일을 직접 로드 및 편집하고 한 번에 원격 컴퓨터에 다시 저장하며 명령줄을 사용하므로 이를 사용하여 기능을 쉽게 구축할 수 있습니다.문제를 공유하는 것이 아니라 제가 찾은 가장 쉬운 방법입니다.

VI 또는 Emacs와 같은 콘솔 기반 편집기를 사용하여 사용해 보십시오.제가 언급한 바와 같이, 문제는 편집 명령이 윈도우 애플리케이션에 바인딩되어 있고, 이는 원격 세션에서 가상화되지 않는다는 것입니다.

위의 모든 제안과 다른 마이크로소프트 관련 솔루션을 시도해 보았지만 어떤 것도 여러분과 제가 원하는 방식으로 작동하지 않습니다. "완전한 대화형 및 반응형 셸". 만약 당신이 처음부터 유닉스 사용자들이 경험하는 ssh 경험을 정말 원한다면 ssh 서버를 설치하는 것을 추천합니다.저는 개인적으로 freeshd를 사용합니다. 여기에서는 http://www.freesshd.com 을, 그리고 여기에서는 http://www.windowsnetworking.com/articles_tutorials/install-SSH-Server-Windows-Server-2008.html 을 구성하는 방법에 대한 지침을 찾을 수 있습니다.지침에 명시된 내용을 모두 작성한 후에는 모든 ssh 클라이언트 앱을 사용하여 컴퓨터에 연결하고 파워셸 전체 대화형을 사용하면 됩니다.Vim, Edit, Emacs 등 파일을 편집하는 데 사용하는 모든 것이 문제 없이 작동합니다.

저는 당신이 진정한 대화형 쉘이 제공하는 것을 달성하기 위해 psremoting, telnet, winner, psexec과 함께 시간을 낭비하지 않기를 권장합니다(나는 이미 그것을 잃었습니다, T_T.직접 SSH 서버를 사용해 보십시오.

@chenz가 제공한 답변에 영감을 받아 Powershell Integrated Shell 내부에서 Visual Studio Code를 사용하여 수행할 수도 있습니다.SSH 원격에서 Powershell 7과 함께 사용해 보았지만 WinRM 원격에서도 작동해야 합니다.

Enter-Session ...
[RemoteSystem] PS> psedit service.log

파일 이름은 다음 패턴을 따릅니다.

C:\users\dev\appdata\local\temp\2\pses-15960\원격 파일\1702137071\winboxname\service.log

SSH를 통해 PowerShell로 쉽게 작업할 수 있도록 nano를 얻었습니다.초코렛에서 살 수 있으니까 그냥...

choco install nano -y

그럼 당신은 그냥...

nano filename

저는 PSRemoting의 한계와 가능한 해결책 또는 해결책을 고려할 때 이 문제에 대해 꽤 철저하게 조사해 왔습니다.

콘솔 편집기는 기본(exe) 명령이며 문자 기반이므로 작동하지 않습니다.(cmd over ssh가 이것들과 함께 작동하는지 궁금합니다.)psremote 세션을 통해 콘솔 호스트와 올바르게 상호 작용하려면 cmdlet이어야 합니다.

PSRemote 세션은 회선 기반입니다.로컬에서 push enter 라인을 편집한 다음 원격 끝으로 전송되고 명령이 실행되고 결과가 반환됩니다.그래서 선 상호작용은 지원하지만 문자 상호작용은 지원하지 않습니다.

이러한 모든 한계를 고려할 때 GNU의 에디션은 완벽하게 적합한 것으로 보입니다.아무도 이를 cmdlet으로 구현하는 것을 고려하지 않았다는 것이 놀랍습니다.

나는 이것을 더 조사하기로 결정했고, 나는 파워셸 cmdlet을 확인했습니다.read-hostC# 등가물이 작동합니다.PSHostUserInterface.ReadLine()PSRemote 세션을 통해 작업하면 작업 라인 편집기를 만드는 데 필요한 모든 작업이 수행됩니다.

제가 지금까지 한 일은 이렇습니다.아마도 좀 더 이국적인 정규식 코드에 대한 도움이 필요할 것 같습니다.

https://github.com/silicontrip/ps-ed

나는 이것을 psremote 세션을 통해 파일을 편집하는 데 사용했습니다.(저는 그것으로 큰 소스 파일을 편집하지는 않겠지만, 이상한 작은 구성 파일이나 ps1 스크립트에는 완벽합니다.)

이 cmdlet을 사용하기 전에 GNU ED에 익숙해야 합니다.VI를 처음 사용하는 것과 같습니다. 그렇지 않으면 VI를 처음으로 사용하는 것과 같습니다.

언급URL : https://stackoverflow.com/questions/3432770/how-to-edit-a-file-in-powershell-remoting-session-powershell

반응형