Estou tendo um monte de problemas para executar um comando do PowerShell. Tudo o que está fazendo é executar um comando que seria executado em uma janela de prompt do CMD.
Aqui está o comando:
"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME
Tentei o seguinte sem sucesso (tentei muitas iterações para tentar obter uma que funcionasse. Provavelmente a sintaxe está toda confusa):
$TEXT = $textbox.Text #$textbox is where the user enters the PC name.
$CMDCOMMAND = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"
Start-Process '"$CMDCOMMAND" $TEXT'
#iex -Command ('"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"' $TEXT)
O comando apenas abrirá a janela de conexão remota do SCCM para o computador especificado pelo usuário na caixa de texto.
powershell
command-line
cmd
user3585839
fonte
fonte
Respostas:
Experimente isto:
& "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" PCNAME
Para o PowerShell, uma string "..." é apenas uma string e o PowerShell a avalia ecoando-a na tela. Para fazer o PowerShell executar o comando cujo nome está em uma string, você usa o operador de chamada
&
.fonte
ipconfig.exe
sem precisar usar&
. A única vez que você precisa usar&
é invocar um nome de comando na forma de string. E você deve usar a "forma de string" quando houver um espaço no caminho ou nome do arquivo.&
, porque o PowerShell pensará que toda a string é o nome do executável. Em vez disso, cite apenas o nome do executável e coloque os parâmetros do executável depois.&
ecmd
?&
é o operador de chamada do PowerShell (também conhecido como invocação). Ele permite que você execute um comando quando o que você tem é uma string que contém o nome do comando ou o caminho para o exe. Você também pode especificar um scriptblock, por exemplo,&{$foo=42}
ou um objeto CommandIno, por exemplo$cmd = Get-Command Get-Date; &$cmd
.cmd
é uma concha diferente. Observe que é&
executado em um escopo filho, portanto, você notará que após o scriptblock que define$foo
acima terminar,$foo
não está mais definido.Para executar ou converter arquivos em lote externamente do PowerShell (especialmente se você deseja assinar todos os seus scripts de tarefas agendadas com um certificado), simplesmente crio um script do PowerShell, por exemplo, deletefolders.ps1.
Insira o seguinte no script:
cmd.exe /c "rd /s /q C:\#TEMP\test1" cmd.exe /c "rd /s /q C:\#TEMP\test2" cmd.exe /c "rd /s /q C:\#TEMP\test3"
* Cada comando precisa ser colocado em uma nova linha chamando cmd.exe novamente.
Este script agora pode ser assinado e executado a partir do PowerShell, gerando os comandos
cmd
diretamente no prompt de comando .É uma maneira muito mais segura do que executar arquivos em lote!
fonte
sc query serviceName
do PowerShell pensando que seria executado, mas sem saída. Tentei várias iterações da técnica &, sem dados. Mas executá-lo da maneira que você recomendou funcionou. Em seguida, clico em cmd.exe /? para ver que outras maravilhas me aguardavam. Eu só gosto de executar cmd quando necessário.Uma solução seria canalizar seu comando do PowerShell para o CMD. Executar o comando a seguir canalizará o
notepad.exe
comando para o CMD, que abrirá o aplicativo Bloco de notas.PS C:\> "notepad.exe" | cmd
Depois que o comando for executado no CMD, você retornará ao prompt do PowerShell e poderá continuar executando o script do PowerShell.
Editar% s
A mensagem de inicialização do CMD é mostrada
Como mklement0 aponta, este método mostra a mensagem de inicialização do CMD. Se você copiar a saída usando o método acima em outro terminal, a mensagem de inicialização será copiada junto com ela.
fonte
&
não funciona. Por exemplo& "mklink"
, não funcionou para mim enquanto"mklink" | cmd
trabalhavaPara quem precisa desta informação:
Eu descobri que você pode executar um comando que está em seu
PATH
script PS e deve funcionar.Às vezes você pode ter que pré-lançar este comando com
cmd.exe /c
Exemplos
Chamando git de um script PS
Tive de reempacotar um
git
cliente embrulhadoChocolatey
(para quem não sabe, é uma espécie de app-store para Windows) que usa scripts PS em massa.Eu descobri que, uma vez
git
noPATH
, comandos como$ca_bundle = git config --get http.sslCAInfo
irá armazenar a localização do
git
crt
arquivo na$ca_bundle
variável.Procurando um aplicativo
Outro exemplo que é uma combinação do presente SO post e este SO post é o uso do
where
comando$java_exe = cmd.exe /c where java
irá armazenar a localização do
java.exe
arquivo na$java_exe
variável.fonte
cmd /c
invocar seus comandos internos , comomklink
. Em contraste,where.exe
é um programa externo, portanto, você pode invocá-lo diretamente. No entanto, devido a um conflito de nome com owhere
alias interno do PowerShell (paraWhere-Object
), você deve usarwhere.exe
; por exemplowhere.exe java
,.Get-Command
vez de chamarcmd
? O mesmo de antes:$java_exe = $(Get-Command java.exe).Source
Você deve usar o cmdlet Invoke-Command para iniciar este programa externo. Normalmente funciona sem esforço.
Se precisar de mais de um comando, você deve usar o cmdlet Invoke-Expression com a
-scriptblock
opção.fonte