2

Excel VBA を使用して単純な Powershell スクリプトを実行しています。Powershell 自体で実行すると、特定のディレクトリ内のいくつかのファイルの 1 つまたは 2 つのファイル名が返されます。

このスクリプトを 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>"}

詳細を見逃している場合は、お尋ねください。

4

2 に答える 2

1

私はこれがかなり遅れていることを知っていますが、これを探している他の人にこれを行う方法を提供したかったのです. PowerShell スクリプトで出力ファイルを作成します。

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

そこから、この行を 1 行ずつ変数に書き込むことができます。

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

そこからテキストをセルに挿入するか、必要に応じて各行を配列に書き込み、必要に応じて各行を個別に選択できます。

于 2017-08-02T20:33:04.950 に答える
0

VBA は、powershell.exe が終了する終了コードを単に見ているようです。これを試して:

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

これにより、VBAが取得できるはずの標準出力にPowershell出力がリダイレクトされると思います。

于 2013-11-05T01:41:18.903 に答える