Então, eu queria apenas copiar este arquivo em Arquivos de Programas, onde ele precisa ser assim (precisar clicar com o botão direito do mouse, executar como Administrador):
Copy-Item \\Poplar\SuperSound -Destination 'C:\Program Files\' -Force -Recurse
mas eu precisava dele em um script powershell.
A maneira usual de elevar é com:
powershell -command "install_bananas.bat" -Verb runas
mas quando eu corro:
powershell -command "Copy-Item \\Zuul\IT\ffmpeg -Destination 'C:\Program Files\' -Force -Recurse" -Verb runas
...que deu um erro:
Copy-Item : A positional parameter cannot be found that accepts argument 'runas'.
Então, em vez disso, tenho que usar -argumentlist com Start-Process:
Start-Process powershell -Verb runas -argumentlist "Copy-Item \\Poplar\SuperSound -Destination 'C:\Program Files\' -Force -Recurse"
Então eu acho que a lista de argumentos é usada apenas pelo Start-Process.
Então, o que é powershell -command versus Start-Process powershell -argumentlist e por que está tendo problemas com -Verb runas quando precisa executar um comando com vários argumentos como:
Copy-Item A -Destination B
?
NOTA: Acho que finalmente é hora de comprar um livro Powershell.
Embora obter um livro lhe dê coisas, acesse os arquivos de ajuda primeiro , pois eles são gratuitos e estão bem na sua frente. ;-}
Executar o comando por meio de um cmdlet ou powershell.exe são duas coisas diferentes. Cada um tem suas especificidades de cotação. Você obtém esses tipos de erros devido à sintaxe incorreta, que inclui as cotações necessárias.
Então, para o seu caso de uso, Start-Process seria algo assim:
Para PowerShell.exe, algo assim:
Ou isto
Thye pode ser combinado, digamos, se você estiver no ISE/VScode e quiser enviar um comando para uma nova instância enquanto permanece no ISE/VSCode, algo assim: