36

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から戻って、VisualStudioを開く「start\ we​​bprod \ c $ \ inetpub \ myapp\web.config」です。

[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を使用してファイルを便利に編集するにはどうすればよいですか?

編集

kbrimingtonの投稿により、sshの-Xオプションについて考えさせられました。おそらく、PowerShellセッションで、ウィンドウ化されたアプリを元のウィンドウ化環境に転送できるようになるのは素晴らしいことです...

それでも、ファイルを編集するだけでよかったと思います。

編集

vi、emacs、cmd、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:標準入力はttyではありません

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

+ FullyQualifiedErrorId \: NativeCommandError

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

MicrosoftWindows[バージョン6.1.7600]

Copyright(c)2009MicrosoftCorporation。全著作権所有。

C:\ Users \ guutlee \ Documents>

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

viと編集ハング(プロンプトを戻すにはControl-C)

cmdが実行され、プロンプトが生成されますが、すぐに終了してPowerShellプロンプトに戻ります

emacsはエラーを生成します(標準入力はttyではありません)

編集

Jeredは、ファイルをローカルにプルバックして編集することを提案しています。私はUNCではなくpssessionsを使用してコピーすることへの彼の答えを飾りました(おそらくこれは彼が意図したものです)

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を実行できる可能性があります。

4

10 に答える 10

27

Powershell 5 を使用している場合は、PSEdit というコマンドを使用できます。ISE からのみ機能します。

  1. まず、PowerShell ISE を開きます
  2. 次に、Enter-PSSession を使用してリモート コンピューターへのリモート セッションを開きます。
  3. 次に、PsEdit 'filename' を使用してファイルを編集します。

リモート ファイルは、(ローカル) ISE ウィンドウの新しいタブで開かれます。

実際には、この SO 質問のコメント セクションからこの回答を見つけましたが、ここに回答として投稿すると、他の人にとって役立つと思います。

于 2016-03-11T09:19:18.490 に答える
4

ローカルでファイルをプルして編集して投稿することはできませんか? これは退屈で洗練されていないことはわかっていますが、編集者は現在リモート セッションで問題を抱えているようです。

例えば、

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
于 2010-08-17T00:44:09.677 に答える
4

いろいろと調べた結果、powershell のヘルプ ドキュメントに関連していると思われるものを見つけました。PowerShell プロンプトで、次のように入力します。

ヘルプ about_remote_troubleshooting

表示されるヘルプ ファイルの最後に、「応答しない動作のトラブルシューティング」というセクションがあります。

反応しない動作のトラブルシューティング

このセクションでは、コマンドの完了を妨げたり、Windows PowerShell プロンプトの復帰を妨げたり遅らせたりするリモート処理の問題について説明します。

コマンドを中断する方法


ユーザー インターフェイスを備えたプログラム、入力を求めるコンソール アプリケーション、Win32 コンソール API を使用するコンソール アプリケーションなど、一部のネイティブ Windows プログラムは、Windows PowerShell リモート ホストでは正しく動作しません。

これらのプログラムを使用すると、出力がない、部分的な出力、完了しないリモート コマンドなど、予期しない動作が発生する場合があります。応答しないプログラムを終了するには、CTRL + C を入力します。報告された可能性のあるエラーを表示するには、ローカル ホストとリモート セッションで「$error」と入力します。

したがって、残念ながら、VIM などの非 GUI コンソール アプリケーションでさえ動作しないようです。なぜこれが当てはまるのか、および/または回避できるかどうかについて、少し光を当てたい人はいますか? PowerShell のリモート処理で vim を使用できれば、私は本当にそれが大好きです。

于 2011-09-23T20:59:59.767 に答える
4
PowerShell_ISE.exe \\REMOTE\...\File.txt 

は、ファイルを直接読み込んで編集し、リモート コンピューターに 1 ステップで保存します。コマンド ラインなので、それを使用して関数を簡単に構築できます。問題の共有を回避することはできませんが、私が見つけた最も簡単な方法です。

于 2012-01-21T07:55:27.690 に答える
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

}

これは機能するはずですが、この関数を使用する前にインタラクティブ セッションを終了する必要があります。

于 2018-02-12T21:29:16.350 に答える
1

私は上記のすべての提案と他のマイクロソフト関連のソリューションを試しますが、どれもあなたと私が望むように機能しません-「完全なインタラクティブでレスポンシブなシェル」-。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で時間を無駄にせず、実際のインタラクティブシェルが提供するものを達成しようとすることをお勧めします(私はすでにそれを失いました、T_T)。そのsshサーバーを試してみてください。

于 2011-03-15T20:11:11.250 に答える
1

VI や Emacs などのコンソール ベースのエディタを使用して試してみてください。私のコメントのように、問題は、編集コマンドがウィンドウ化されたアプリケーションにバインドされており、リモート セッション全体で仮想化されていないことだと思います。

于 2010-08-08T03:06:31.537 に答える