このコードを使用して、サーバー上でリモート コード (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"