我正在使用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>"}
如果我遗漏了任何细节,请询问。
答案 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应该能够接收的标准输出。