如何获取在Excel VBA中运行的Powershell脚本的返回值?

时间:2013-11-04 22:04:45

标签: powershell excel-vba return-value vba excel

我正在使用Excel VBA运行一个简单的Powershell脚本,当在Powershell本身运行时,它会返回给定目录中某些文件的一个或两个文件名。

我可以从我的VBA运行此脚本,但返回值始终是一些随机整数。如何让脚本返回通过Powershell脚本返回的文件名?

VBA调用脚本:

 Dim weekly As String

 weekly = Shell("Powershell ""<location of powershell script.ps1>"" ")

脚本:

Get-ChildItem "<directory to search in>" | Where-Object {$_.Name -match "<regex to find file name>"}

如果我遗漏了任何细节,请询问。

2 个答案:

答案 0 :(得分:1)

我知道这已经晚了,但我想让其他人在寻找这种方法。 让powershell脚本编写输出文件:

Get-ChildItem "Directory to Search" | Select-String -Pattern "what to seach for" | out-file "C:\output.txt"

从那里你可以逐行写一个变量:

Sub test()
Dim txtfile, text, textline As String

txtfile = "C:\output.txt"

Open txtfile For Input As #1

Do Until EOF(1)
    Line Input #1, textline
    text = text & textline
Loop

Close #1

MsgBox text

End Sub

从那里你可以将文本插入一个单元格,或者如果愿意,你可以将每一行写入一个数组,并在需要时单独选择每一行。

答案 1 :(得分:0)

看起来VBA只是看到powershell.exe退出的退出代码。试试这个:

Get-ChildItem "<directory to search in>" | Where-Object {$_.Name -match "<regex to find file name>"} 2>&1

我相信这会将您的Powershell输出重定向到VBA应该能够接收的标准输出。