The only way I can think of without being able to modify the input parameters would still require modifying the command called somewhat.
In order to preserve the quotes, perhaps try capturing the full command-line that the PowerShell script was called with.
So I put this in the test1.ps1 script:
Write-Host (Get-WmiObject -Query "select CommandLine from Win32_Process where CommandLine like '%test1%'").CommandLine
Then this is what is returned if the script is called in this manner:
PS C:\temp> powershell .\test1.ps1 a=application o="this object" msg_text="this is a text"
"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe" .\test1.ps1 a=application "o=this object" "msg_text=this is a text"
This is only possible if a new instance of PowerShell is called, however, otherwise the parameters won't be available by this method:
PS C:\temp> .\test1.ps1 a=application o="this object" msg_text="this is a text" > zzz3.txt
PS C:\temp>
Of course if this approach is taken, you'll then need to parse the input arguments manually, which you might be able to do with help of the $args
object. It's a long-shot, but does preserve the quotes.