1

私はpowershellを初めて使用しますが、非常に基本的な問題に直面しています。次のコマンドを実行すると、powershell が文句を言います。特殊文字に問題があるようです: [*, =, &, <, >]. どうすればそれらをエスケープできますか? これは、powershell バージョン 2 です。 [winexe を使用して、Linux ボックスから powershell コマンドを実行しています。ps コマンドをコピーして貼り付けると、問題なく動作するように見えますが、リモートで実行すると、powershell が文句を言います。]

winexe "cmd /c echo . | powershell Set-ExecutionPolicy bypass -Force -Scope CurrentUser;C:\test.ps1  -name 'B*=&<+>%N' -extra_logging '0' "

dos charset 'CP850' は利用できません - ASCII を使用します 文字列の開始: 行:1 char:106 + Set-ExecutionPolicy バイパス -Force -Scope CurrentUser;C:\test.ps1 -lun <<<< 'B*= が欠落していますターミネータ: '. 行:1 char:110 + Set-ExecutionPolicy bypass -Force -Scope CurrentUser;C:\test.ps1 -lun 'B*= <<<< + CategoryInfo : ParserError: (B*=:String) [], ParentContainsErro rRecordException + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

システムは、指定されたファイルを見つけることができません。システムは、指定されたファイルを見つけることができません。

4

2 に答える 2

3

問題は powershell ではなく、通常のコマンド シェルです。何winexeが行われるかについて合理的な仮定を立てると、コマンドの関連部分は次のとおりです。

cmd /c echo . | powershell Set-ExecutionPolicy bypass -Force -Scope CurrentUser;C:\test.ps1 -name 'B*=&<+>%N' -extra_logging '0'

これには、コマンド シェルによって解釈されるいくつかの特殊文字が含まれています。一重引用符で囲まれたコンテンツは引用されているとは見なされないため、明示的に引用する必要があります。パイプを使用しているため、文字が2回処理されるため、二重引用符で囲む必要があります。

cmd /c echo . | powershell Set-ExecutionPolicy bypass -Force -Scope CurrentUser;C:\test.ps1 -name 'B*=^^^&^^^<+^^^>^%N' -extra_logging '0'

キャレットは、コマンド シェルが次の文字を文字どおりに受け取るようにします。

または、winexeコマンドを直接実行するのではなく、与えられたコマンドをコマンド シェルに渡す場合は、各特殊文字の前に 3 重引用符 (つまり、7 つのキャレット) を付ける必要があります。

于 2013-10-02T05:23:12.400 に答える
0

私は間違っているかもしれませんが、逆向きのアポストロフィまたは墓の記号だと思います。`

于 2013-10-02T04:05:41.030 に答える