如何在powershell远程会话中编辑文件(powershell)

问题描述 投票:33回答:8

我使用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

所以编辑“filename”似乎挂起,来自powershell.exe或powershell_ise.exe

我唯一能想到的就是退出pssession和“start \ webprod \ c $ \ inetpub \ myapp \ web.config”,这将打开visual studio。

[appprod]:PS C:\ myapp>退出

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方便地编辑文件?

编辑

kbrimington的帖子让我想到了ssh的-X选项。对于PowerShell会话而言,将窗口应用程序转发回原始窗口环境可能会是一件非常棒的事情......

但我仍然很高兴只是编辑文件。

编辑

使用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 \ Documents> 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]

版权所有(c)2009 Microsoft Corporation。版权所有。

C:\ Users \用户guutlee \文件>

[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

编辑web配置

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

我们可以在任一方向上运行invoke-commands,本地到远程或远程返回本地。

powershell editing powershell-remoting
8个回答
21
投票

如果您使用的是Powershell 5,则可以使用名为PSEdit的命令。它只适用于ISE。

  1. 首先,打开PowerShell ISE
  2. 然后使用Enter-PSSession打开远程计算机到远程计算机
  3. 然后使用PsEdit'filename'编辑文件

远程文件将在(本地)ISE窗口的新选项卡中打开。

实际上我从this SO question 的评论部分找到了这个答案,但我认为如果我把它作为答案在这里发布,它将对其他人有所帮助。


4
投票

你不能在本地拉文件,编辑并发布吗?我知道这很乏味而且不优雅但是编辑们目前在远程会话方面遇到了问题。

EG,

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

然后在本地进行更改

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

编辑

此外,如果您只是替换某些实例,您可以非常轻松地完成此操作。

EG,

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

4
投票

经过深入挖掘后,我发现了一些与powershell帮助文档相似的内容。在powershell提示符下,键入:

帮助about_remote_troubleshooting

在显示的帮助文件的最后,有一个标题为“故障排除不相关行为”的部分,其中说明:

故障排除不相关的行为

本节讨论阻止命令完成并阻止或延迟返回Windows PowerShell提示符的远程处理问题。

如何中断命令


某些本机Windows程序(如具有用户界面的程序,提示输入的控制台应用程序以及使用Win32控制台API的控制台应用程序)在Windows PowerShell远程主机中无法正常运行。

使用这些程序时,您可能会看到意外行为,例如无输出,部分输出或未完成的远程命令。要结束无响应的程序,请键入CTRL + C.要查看可能已报告的任何错误,请在本地主机和远程会话中键入“$ error”。

因此,看起来甚至非GUI控制台应用程序(例如VIM)也不会工作。任何人都想了解为什么会出现这种情况和/或是否可以解决这个问题?如果我可以使用vim over powershell remoting,我真的很喜欢它。


3
投票

首先,在本地计算机上创建一个临时文件夹(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
投票
PowerShell_ISE.exe \\REMOTE\...\File.txt 

将直接加载和编辑文件并一步将其保存回远程计算机,并且由于其命令行,使用它可以轻松构建函数。不会分享问题,但这是我找到的最简单的方法。


1
投票

使用基于控制台的编辑器(如VI或Emacs)进行尝试。在我的评论中,我认为问题是edit命令绑定到一个窗口化的应用程序,而该窗口化的应用程序又不是通过远程会话虚拟化的。


1
投票

我尝试了所有上述建议甚至其他微软相关的解决方案,但没有一个按照您和我想要的方式工作 - “完全交互式和响应式shell” - 。如果你真的想拥有unix用户从时间开始的ssh体验,我建议你安装一个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,试图实现真正的交互式shell提供(我已经失去了它,T_T)。尝试使用ssh服务器看看你的自己。


-1
投票

我让nano通过SSH轻松地工作到PowerShell。它可以在Chocolatey中使用,所以你可以做...

choco install nano -y

那你就可以......

nano filename
© www.soinside.com 2019 - 2024. All rights reserved.