Por que usar "Cmd / c Powershell" em vez de apenas "Powershell"?

25

Eu adicionei meu primeiro menu de contexto usando o registro de acordo com as instruções dadas em esta questão (yay eu).

Eu originalmente usei isso como o comando que ele executa, ou seja, o valor da chave "command":

Cmd /C Powershell  "imageSeqView --% \"%1\""

ImageSeqView é o nome da minha função powershell, eu importo no meu perfil do powershell. Funciona bem, mas estou pensando: por que usar cmd para abrir Powershell para executar a função? Não seria mais simples apenas fazer

Powershell  "imageSeqView --% \"%1\""

Esse comando parece funcionar muito bem, mas como parece canônico usar cmd , estou imaginando se ele está secretamente matando filhotes ou algo assim?

    
por stib 01.09.2017 / 04:40

3 respostas

29

Não há bons motivos para fazer isso. Na verdade, o único efeito real que acontece é atrasar as coisas.

As pessoas podem achar que há uma boa razão para isso. O uso do CMD tem os seguintes efeitos, que geralmente podem ser bons em alguns casos:

  • Ativa comandos internos, como " DIR "
  • Define variáveis de ambiente, como a variável PATH

No entanto, neste caso, nenhum desses benefícios é ganho. Vamos ver os dois cenários:

Portanto, pode haver, em alguns casos, um momento em que usar " CMD /C " é útil. Por exemplo, se eu usar o comando externo PSEXEC (baixado do SysInternals) e tentar executar " DIR " em um computador remoto, o Windows tentará executar o comando " DIR ". O Windows não executará esse comando, pois não há nenhum arquivo " DIR.EXE ", " DIR.BAT " ou " DIR " terminando com outra extensão suportada. (Extensões suportadas podem ser vistas executando " ECHO %PATHEXT% ".)

No entanto, nesse cenário, se eu tentar executar " CMD /C DIR ", isso funcionará, porque o Windows procurará um executável chamado " CMD " e encontrará isso e, em seguida, CMD . acabe executando com êxito o comando " DIR " que é uma parte interna do comando " CMD ".

Nesse caso, você pode executar apenas powershell tão facilmente quanto " CMD /C powershell ", para não obter benefícios do desnecessário " CMD /C ". O único benefício que estou vendo ao passar pela etapa extra de digitar " CMD /C " é fornecer um exemplo que será útil se alguém decidir tentar modificar um exemplo para executar uma linha de comando " DIR " ou "% código%". Ter um exemplo mais flexível pode ser útil para algumas pessoas. Não é realmente necessário quando as pessoas sabem o que estão fazendo.

Quanto ao segundo ponto fornecido, que é definir variáveis de ambiente, também é algo que você não está fazendo ativamente neste caso específico. Talvez algumas pessoas pensem que estão ajudando, fazendo com que a variável de ambiente PATH seja definida. No entanto, quando você executa comandos diretamente (por exemplo, na opção de menu "Executar" do menu Iniciar), o sistema operacional Windows pode procurar comandos em alguns locais adicionais. Por exemplo, no Windows XP / mais recente, você pode executar:

COPY

Se o comando que você deseja executar estiver listado em "Caminhos do Aplicativo", o Windows poderá encontrar o programa mesmo que não esteja no caminho. Portanto, é provável que o Windows encontre ainda MAIS do que o que o CMD encontraria no PATH usado pelo CMD.

Um possível benefício é se você quiser que o CMD seja executado para que você possa se referir a uma variável de ambiente como% USERPROFILE% ou% LOGONSERVER% ou% TEMP% /% TMP%, mas como você não está fazendo isso, não precisa executar " reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" ".

Então, para o seu caso em particular: Não há uma boa razão para isso. Os efeitos que você está obtendo são fazer com que seu computador trabalhe mais, diminuindo o processo e usando mais memória (tudo o que você está fazendo em quantidades insignificantes em equipamentos modernos).

    
por 01.09.2017 / 06:37
18

Porque se livra da coloração.

Pode ser que eles achem que as pessoas acham o fundo azul distraindo.

    
por 01.09.2017 / 09:50
1

Com cmd powershell , você pede ao shell atual, explorer, para invocar cmd com os parâmetros powershell, "imageSeqView ..." com valor analisado de% 1 para cmd.

Nesse caso,% cm_de% é esperado por cmd para ser um comando cmd, um exe ou um dos scripts suportados pelo cmd, por exemplo, morcego.

Com "powershell" , você pede ao shell atual, explorer, que invoque powershell "imageSeqView ..." com os parâmetros powershell com valor analisado de% 1 para o powershell.

Nesse caso, " imageSeqView ... " é esperado pelo powershell como um cmdlet, um exe ou um script powershell.

Desde que " imageSeqView " seja uma função powershell, a 1ª maneira é completamente desnecessária e reduz ligeiramente o desempenho.

Para as opções de janela de comando, existem opções semelhantes em powershell, como -NoExit, que deve ser o mesmo que / K em cmd.

Para revestimento de tubo, inicializando env envs, o powershell pode fazer o mesmo.

    
por 01.09.2017 / 09:31