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

js81xvg6  于 2023-04-13  发布在  Shell
关注(0)|答案(3)|浏览(318)

我正在使用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>"}

如果我错过了任何细节,请询问。

rnmwe5a2

rnmwe5a21#

我知道这已经很晚了,但我想让其他任何人都能找到这样做的方法。让你的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

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

9jyewag0

9jyewag02#

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

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

我相信这会将您的PowerShell输出重定向到VBA应该能够获取的stdout。

gr8qqesn

gr8qqesn3#

可以使用WScript访问PowerShell脚本的StdOut输出。请使用以下代码:

Set wShell = CreateObject("WScript.Shell")
Set wShellOutput = wShell.Exec("powershell 'C:\Path\To\file.ps1'")
text_output = wShellOutput.StdOut.ReadAll ()

我建议在.Exec()调用中使用单引号而不是双引号,因为Windows处理双引号很麻烦。

相关问题