Sim, eu sei, existem dezenas de postagens para isso com praticamente o mesmo título; no entanto, não consigo fazer nada funcionar.
Estou simplesmente tentando chamar um executável que tenha argumentos/interruptores de dentro de um script do Powershell. Existem cerca de 50 executáveis diferentes que preciso executar para um script com vários comandos e listas de parâmetros. Não consigo descobrir como executar nem mesmo a maioria dos exemplos do Mickey Mouse. Se eu conseguir encontrar uma solução para executar o seguinte, provavelmente posso extrapolar a solução para atender às minhas necessidades.
- rmdir "C:\AlgumCaminho" /S /Q
- diretório /s /b
Eu tentei muitas, MUITAS soluções postadas e nenhuma delas funciona [para mim] e praticamente todas elas produzem os mesmos erros. Para os exemplos acima, geralmente obtenho um dos seguintes:
- "Não foi possível encontrar um parâmetro posicional que aceite o argumento '/S'." ou
- "Não foi possível encontrar o caminho 'D:\s' porque ele não existe."
Eu tentei várias soluções prescritas usando o operador de chamada de e comercial, dividindo argumentos, escapando de aspas, Invoke-Process, Start-Process, Invoke-Expression, etc.
Ironicamente, consigo executar alguns comandos com switches sem nenhum erro. Por exemplo, executar o seguinte funciona sem erros sem escapar/encapsular/encapsular--apenas incluindo a linha no script. Você notará que tem interruptores e esses interruptores têm barras.
- taskkill /f /im MinhaTask
Além disso, ambos os seguintes trabalhos (observe a barra versus a não-barra):
- ping -n 3 -4 -l 64 yahoo.com
- ping /n 3 /4 /l 64 yahoo.com
Portanto, parece que as barras não são o problema. Só não sei por que os exemplos acima não funcionam.
Por favor, NÃO estou procurando um equivalente do Powershell para os exemplos acima. Ou seja, não estou procurando uma solução Get-ChildItem para dir ou uma solução Remove-Item para rmdir. Estou literalmente procurando como chamar um executável no Powershell que tenha argumentos; e, especificamente, usando esses exemplos. Também seria bom saber por que os exemplos de dir/rmdir não funcionam enquanto o taskkill e o ping funcionam.
Agradecemos antecipadamente pela sua resposta. Qualquer ajuda será apreciada.
dir
não é um executável. É um comando interno do shell – tanto o PowerShell quanto o Cmd têm seus próprios comandos internos chamados 'dir' e aceitam argumentos completamente diferentes. (A versão do PowerShell é, na verdade, um alias para Get-ChildItem e espera argumentos de estilo PS padrão.)Para chamar um Cmd interno do PowerShell, execute-o através de
cmd.exe /c
:(Ou implemente exatamente a mesma funcionalidade usando o . do PowerShell
Get-ChildItem
.)Da mesma forma, para chamar um PowerShell integrado a partir do Cmd, você chamaria powershell.exe:
Seus outros exemplos são executáveis autônomos (taskkill.exe e ping.exe), portanto, seu comportamento não difere entre os shells.