4

このコードを使用して、サーバー上でリモート コード (MSI インストール) を実行しています。スクリプトに二重引用符を渡すだけでは機能しません。出力とともに、以下に示す 2 つのバリエーション (#3 と #4) を試しました。

入力 #1 (コマンドで二重引用符をテストする単純なケース)

powershell.exe -inputformat none -File client.ps1 -target 1.2.3.4 -port 5985 -password "pass" -username "user" -command "echo hello"

アウトプット(作品)

hello

入力 #2 (わかりました、これは機能しません)

powershell.exe -inputformat none -File client.ps1 -target 1.2.3.4 -port 5985 -password "pass" -username "user" -command "echo hello world"

出力

hello
world

入力 #3

powershell.exe -inputformat none -File client.ps1 -target 1.2.3.4 -port 5985 -password "pass" -username "user" -command "echo `"hello world`""

アウトプット(もう一方の単語はどうした?)

hello

入力 #4

powershell.exe -inputformat none -File client.ps1 -target 1.2.3.4 -port 5985 -password "pass" -username "user" -command @'
>> echo "hello world"
>> '@
>>

出力 (繰り返しますが、2 番目の単語が欠落しています)

hello

エコーが機能する場合、実行中の実行空間ベースの使用法に MSI コマンドへの変更を組み込むことができるはずです。


以下を使用すると、MSIセットアップは正常に機能します。一重引用符に注意してください。

msiexec /qn /i 'C:\setups\My Software.msi'

しかし、パブリック プロパティを渡す必要があり、MSI はその中の一重引用符を好みません。以下を実行しようとすると、MSI 引数ダイアログが開きます。

msiexec /qn /i 'C:\setups\My Software.msi' MYPROP='My Value'

サーバー上のローカル コマンド プロンプトからこれを実行すると、問題なく動作します。

msiexec /qn /i "C:\setups\My Software.msi" MYPROP="My Value"
4

2 に答える 2