Это потому, что вы запускаете функцию myService в текущем экземпляре powershell, а не в новом, который вы открываете.$ (myService) - это выражение, которое, поскольку оно окружено двойным ", запускается в текущем экземпляре powershell, а результаты передаются в экземпляр Start-Process.
Эту функцию необходимо передать в виде строки вStart-Process
Start-Process -FilePath powershell.exe -Verb RunAs -Wait -ArgumentList '-Command',"function myService() {New-Service -Name 'MyService' -BinaryPathName 'c:\windows\system32\svchost.exe -k netsvcs'};myService"
Вы также можете превратить функцию в строку перед рукой и передать ее в двойных кавычках "
$Function1 = @"
function myService() {
New-Service -Name 'MyService' -BinaryPathName 'c:\windows\system32\svchost.exe -k netsvcs'
}
"@
Start-Process -FilePath powershell.exe -Verb RunAs -Wait -ArgumentList '-Command',"$Function1;myService;pause"