Excel 매크로에서 PowerShell 스크립트 호출

Excel 매크로에서 PowerShell 스크립트 호출

Excel의 매크로에서 PowerShell 스크립트를 호출하려고 합니다.

나는 다음과 같은 여러 가지 예를 보았습니다.

retval = Shell("powershell ""C:\MyTest.ps1""", 1)

그러나 이것을 사용하려고 하면 다음과 같습니다.

Sub Connect_01()  
  Dim x
  x = Shell(“powershell.exe ""\\corp\hdq\Path with spaces\PowerShell\Modules\macro01.ps1""", 1)  
End Sub  

컴파일러 오류가 발생합니다. Syntax error
할당을 제거하면 첫 번째 따옴표 쌍에 오류가 발생합니다.
Expected: list separator or )"

VBA에 대한 경험이 많지 않고 Shell() 명령에 대한 경험도 없으므로 도움을 주시면 감사하겠습니다.

답변1

이를 수행하는 두 번째 방법이 있습니다. 그것은 사용한다Windows 스크립트 호스트의 Exec방법.

할 수 있다는 큰 장점이 있습니다값 다시 읽기외부 PowerShell, 명령줄 또는 가지고 있는 다른 명령줄 도구에서. 따라서 Excel과 Powershell 간에 양방향 통신이 가능합니다.

엑셀 매크로

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

명령에 대한 다른 작업 예는 다음과 같습니다.

  • strCommand = "ping.exe 127.0.0.1"
  • strCommand = "Powershell Echo Hello World"

My PS File.ps1시연할 내 PowerShell 파일은 다음과 같습니다.

echo "Hello World"
$x = 1 + 1
echo $x

echoPowerShell 파일이나 명령줄 도구 내에서 결과를 얻으면 PowerShell에서 모든 복잡한 작업을 수행할 수 있습니다 . 이는 다음 주소로 글을 쓴다는 의미입니다.표준 출력(표준 출력). 스크립트가 완료된 후 Excel은 다음을 사용하여 모든 값을 읽습니다.WshShellExec.StdOut.ReadAll

공백이 있는 경로가 Excel에서 PowerShell로 올바르게 전달되도록 하려면 경로를 네 개의 큰따옴표로 묶습니다."powershell -file ""C:\my path\"" "

Excel의 결과

여기에 이미지 설명을 입력하세요

주의사항

  • RunWscripts 방법 과 달리 이 Exec방법은 명령줄 창을 숨길 수 없습니다.
  • 루프를 다음과 같이 사용할 때 안정적인 결과를 얻을 수 없었습니다.Microsoft의 MSDN 기사에 나와 있습니다.외부 명령줄 도구가 완료되었는지 확인하려면

사용된 자원

답변2

대신 이것을 사용해 보세요 1. 1이 어디서 나오는지 잘 모르겠습니다.

Sub Connect_01()
Dim x as Variant
x = Shell("POWERSHELL.EXE " & "\\corp\hdq\Path with space\PowerShell\Modules\macro01.ps1", vbNormalFocus)
End Sub

아니면 모두 함께 제외하세요 -

Sub Connect_01()
Dim x
x = Shell("POWERSHELL.EXE " & "\\corp\hdq\Path with space\PowerShell\Modules\macro01.ps1")
End Sub

답변3

이 스레드의 OP 부분에서 코드에 닫는 괄호가 누락되었습니다. 따라서 '예상: 목록 구분 기호 또는 )" ' 오류가 발생합니다.
x=SHELL(을 사용하는 답변에서 두 가지 중 하나를 시도하십시오. 1) & 앞뒤의 공백을 제거하십시오. 2) &를 사용하는 대신 다음을 사용해 보십시오. +

답변4

POWERSHELL.EXE 대신 PowerShell 전체 경로를 사용하세요. 전체 경로는 C:\Windows\syswow64\WindowsPowerShell\v1.0\PowerShell.exe입니다.

관련 정보