Я обнаружил, что эта маленькая программа на С полезна для определения того, что PowerShell делает с аргументами, передаваемыми внешней программе.(Скомпилируйте его для UNICODE.)
#include "windows.h"
#include "stdio.h"
int wmain(int argc, wchar_t* argv[])
{
wprintf(L"%s\n", GetCommandLineW());
for (int i=0; i<argc; ++i)
{
wprintf(L"arg[%d]: %s\n", i, argv[i]);
}
return 0;
}
В вашем исходном примере это могло бы сработать, если бы вы вызвали команду как:
& $vmrc -h $($server) -p $unencoded -M $moref
Я говорю «может», потому что яне знаю, что в $ unencoded и $ moref.
Попытка вызвать его как:
& $vrmr $vmrcArgs
привела бы к значению $ vmrcArgs, заключенному в кавычки в командной строкек внешнему приложению, так что приложение, скорее всего, будет интерпретировать его как один аргумент.Поэкспериментируйте с программой на C, и вы увидите, как PowerShell пытается принимать интеллектуальные решения о цитировании, когда генерирует командную строку для внешнего приложения.
(Если вы намеревались запустить отдельный процесс, тогдаэтот ответ неуместен. Извините, если это так.)