Existe uma segunda maneira de fazer isso. Ele usa método Exec
do host de scripts do Windows .
Ele tem a grande vantagem de poder ler os valores de seu PowerShell externo, linha de comando ou qualquer outra ferramenta de linha de comando que você tenha. Então você tem uma comunicação bidirecional entre o Excel e o Powershell.
Macro do Excel
Sub RunAndGetCmd()
strCommand = "Powershell -File ""C:\path\to\My PS File.ps1"""
Set WshShell = CreateObject("WScript.Shell")
Set WshShellExec = WshShell.Exec(strCommand)
strOutput = WshShellExec.StdOut.ReadAll
Msgbox strOutput
End Sub
Outros exemplos de trabalho para um comando podem ser
-
strCommand = "ping.exe 127.0.0.1"
-
strCommand = "Powershell Echo Hello World"
Meu arquivo do PowerShell My PS File.ps1
para demonstrar foi
echo "Hello World"
$x = 1 + 1
echo $x
Você pode fazer todas as coisas complexas no PowerShell contanto que você use echo
dos resultados de dentro do seu arquivo do PowerShell ou da ferramenta de linha de comando. Isso significa que você escreve para StdOut (saída padrão).
Após o script terminar, o Excel lê todos os valores com WshShellExec.StdOut.ReadAll
Para garantir que os caminhos com espaços sejam passados corretamente do Excel para o PowerShell, coloque o caminho entre quatro aspas duplas "powershell -file ""C:\my path\"" "
Resultado no Excel
Advertências
- AocontráriodométodoWscripts
Run
,ométodoExec
nãopodeocultarajaneladalinhadecomando - Nãoconseguiresultadosestáveisquandouseiumloopcomo
mostrado no artigo do MSDN da Microsoft para verificar se a ferramenta de linha de comando externa foi concluída