2013-11-04 66 views
2

我正在使用Excel VBA運行一個簡單的Powershell腳本,該腳本在PowerShell本身中運行時會返回給定目錄中某些文件的一個或兩個文件名。如何獲取在Excel VBA中運行的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>"} 

如果我錯過任何細節,請詢問。

回答

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 

從那裏你可以插入文本到單元格,或者如果首選,你可以寫每行到一個數組,並根據需要單獨選擇每一行。

0

它看起來像VBA只是看到powershell.exe退出的退出代碼。試試這個:

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

我相信,這將你的PowerShell的輸出重定向到標準輸出該VBA應該能夠回暖。

+0

我很激動這個工作!但是,它沒有。你認爲可能有另一種做法嗎? – Casey

相關問題