Powershell:アポストロフィを正しくエスケープする


2

powershellからコマンドを実行したいのですが、powerershellは外部サーバーでコマンドを実行しています。 plink。しかし、これは私が持っていない場合にのみ機能します ' または " それ以外の場合、Powershellはジャンプして例外を出力します。

例:

Invoke-Expression "$plinkPath -ssh $username@$host 'echo well...; echo hello'"

与える

well...
hello

。しかし、両方をエコーし​​たい場合はどうなりますか ' そして "、 いう

Invoke-Expression "$plinkPath -ssh $username@$host 'echo well...; echo hello, my "friend" 'brutus'!'"

取得するため

well...
hello, my "friend" 'brutus'!

編集:拡張子、私はしたいです $

well...
hello, my "friend" 'brutus', you $insult!

1
キーボードのチルダ(〜)と同じキーであるバックティックso( `)でエスケープしてみてください。あるいは、実際には一重引用符も2倍にしてみてください。あなたが同様に役に立つと思うかもしれない詳細についてはここを読んでください: rlmueller.net/PowerShellEscape.htm
Pimp Juice IT

仕事をするのに間違ったコマンドレットを使用しています。 Invoke-Expression ローカルコマンド(PowerShellコード)を実行するために使用する必要があります。実行可能ファイルを実行したい場合は、実行してください。にリストされているオプションの1つを使用することを検討してください スペースと引用符を含むパラメーターを使用してPowerShellでEXEファイルを実行する方法
Seth

両方のあなたの提案は大丈夫ですが、それが実行になるとそれは私のために雑然とする方法を得ました awk その(それ自体でさえも)ほとんど読めないコマンドラインを使って。そのため、コマンドをスクリプトにまとめてアップロードしました。 pscp そしてそれを実行する plink
Bowi

回答:


0

完全を期すために、これは私が要求した応答に対するコマンドです。

& $plinkPath -ssh $username@$host "echo well...; echo Hello, my \\\`"friend\\\`" \'brutus\', you \`$insult!"

それはもたらします

well...
Hello, my "friend" 'brutus', you $insult!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.