executar o comando powershell a partir do cmd

30

como eu posso executar este comando do cmd:

powershell.exe "(get-process |? {$ _. Descrição -eq" Sysinter Process Explorer "}) | selecione nome do processo | arquivo de saída $ env: APPDATA \ example.txt"

Ainda recebo este erro:

Você deve fornecer uma expressão de valor no lado direito do operador '-eq'. Na linha: 1 caractere: 37 + (get-process |? {$ _. Descrição -eq <<<< Sysinternals Process Explorer}) | selecione nome do processo | arquivo externo $ env: APPDATA \ example.txt + CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordEx ception + FullyQualifiedErrorId: ExpectedValueExpression

Qassam Mahmoud
fonte
3
Seu problema pode ser o seu conjunto interno de aspas. Tente removê-los ou, se eles tiverem que ser usados, tente usar esse cara: 'aka o apóstrofo no lugar.
DeathByTensors
2
Aviso - não use obscenidades em suas postagens. Eu o removi para você. Observe que outros usuários podem ter marcado sua postagem como "rude ou abusiva", levando a uma possível perda ou suspensão de representante. Por favor, leia Seja Legal : "Evite termos vulgares e qualquer coisa sexualmente sugestiva"
DavidPostill

Respostas:

39
powershell -command "get-process | ? {$_.Description -eq 'Sysinter Process Explorer'} | select processname | out-file $env:APPDATA\example.txt"

basicamente você tem um comando PowerShell e colá-lo entre essas aspas para chamá-lo de CMD

powershell -command " #PasteCodeHere "

dentro dessas aspas você deve trabalhar, 'caso contrário ele interromperá o parâmetro de comando.

Editar: Informações adicionais:

muitas vezes você encontrará isso: powershell -command "& 'somestuff'"

o &é usado para chamar um arquivo. quando você está usando apenas um comando não &é necessário, quando deseja chamar um script, você deve usá-lo.

powershell -command "& 'C:\foobar.ps1'"

Você também pode usar powershell -file C:\file.ps1para chamar um script

SimonS
fonte
u são o melhor homem <3 que está funcionando
Qassam Mahmoud
3
Se o comando a ser executado tiver aspas, elas deverão ser duplicadas. Exemplo: powershell -comand "dir" "c: \ Arquivos de Programas" ""
Myobis 29/03
1
@myobis ou você pode simplesmente usar aspas simplespowershell -command " dir 'C:\Program Files' "
Simons
1
@myobis Na verdade, dobrar as aspas não funciona (no Windows 10 cmd). Mas o uso de escape barra invertida fez:powershell -command "dir \"c:\Program Files\" "
wisbucky
0

Coloquei os seguintes comandos em um arquivo em lotes para redefinir o Edge (que vem apresentando alguns problemas de tempos em tempos). O arquivo em lotes foi executado no nível do administrador. Observe as aspas triplas na linha do PowerShell. Este exemplo pode esclarecer coisas para aqueles que tentam executar um comando do PowerShell a partir de uma linha de comando "cmd".

@echo off
c:
cd %userprofile%\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe
rmdir /s /q 
userprofile%\AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe
powershell "Get-AppXPackage -AllUsers -Name Microsoft.MicrosoftEdge | Foreach 
{Add-AppxPackage -DisableDevelopmentMode -
  Register"""$($_.InstallLocation)\AppXManifest.xml""" -Verbose}"

Observe as aspas "triplas" na linha do PowerShell. Essa linha, a propósito, é uma única linha com "For Each" e "-Register" sendo agrupados por palavras nesta caixa de comentários. Deve ser uma linha única no arquivo em lotes (ou na linha de comando, se digitado manualmente em uma cmdsessão).

O importante é que, depois que a palavra "PowerShell" vírgulas invertidas (") inicie e termine o comando, todas as vírgulas internas invertidas que já estão sendo passadas no comando PowerShell sejam convertidas em aspas" triplas "( """)

Chris Raisin
fonte