アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAでパワーシェルを実行したいのですが、なかなかうまく出来ず、有識者の知識をお借りさせてください。

wshShellだと引数が上手く渡せない(PowerShell自体実行できてなさそう?)ですが、shellだと上手く実行できます。
ただ、非同期ではその後の処理に影響があるため同期で処理したいところです。

どこか記載が誤っている、もしくは改善点等あればご教授してください。

以下に簡潔にコードを記載します。

【前提】
指定のフォルダ下にあるファイルすべてのハッシュ値を取得したい

【VBAコーディング】
Dim psFilePath as String 'PowerShell格納先
Dim FolderPath as String 'ハッシュ取得先パス格納
Dim textOutputPath as String 'PowerShellから取得したハッシュを書き出すパス
Dim wshShell as Object '同期してPowerShellを動かすため

Dim ToolPath as String '本ツールパス格納
Dim ToolBook as Workbook '本ツールを変数に格納


Set ToolBook =ThisWorkbook
ToolPath = ToolBook.Path

Set wshShell =CreateObject("WScript.Shell")

'実行するPowerShell格納先
psFilePath =(ToolPath + "¥Tools¥hash.ps1")

'ハッシュ取得先
FolderPath = (ToolPath + "¥export")

'ハッシュ取得結果出力先
textOutputPath = (ToolPath + "¥Tools¥hash.txt")

'PowerShell実行
wshShell.Run "powershell.exe -File """ & psFilePath & """ """ & FolderPath & """ """ & textOutputPath & """", vbNomalFocus

【PowerShellコーディング】

param(
[string]$folderPath,
[string]$textOutputPath
)

# 指定したフォルダ内のすべてのファイルのハッシュ値を取得してテキストファイルに書き出す
# 指定したフォルダ内のすべてのファイルのフルパスを取得する
$files = Get-ChildItem -Path $folderPath -Recurse -File

# ファイルを書き込むためのストリームライターを作成する
$streamWriter = New-Object System.IO.StreamWriter($textOutputPath, $false, [System.Text.Encoding]::UTF8)

# 指定したフォルダ内のすべてのファイルのハッシュ値を計算して書き込む
foreach ($file in $files) {
try {
$hash = Get-FileHash -Path $file.FullName -Algorithm SHA256
$filePath = $file.FullName -replace '"', ''
$line = "$filePath`t$($hash.Hash)"
$streamWriter.WriteLine($line)
}
catch {
$_.Exception.Message | Out-File -FilePath "C:\path\to\your\errorlog.txt" -Append
}
}

# ストリームライターをクローズする
$streamWriter.Close()

よろしくお願いいたします。

A 回答 (2件)

vbNormalFocus を vbNomalFocus とタイプミスしているので、


未定義変数になり値ゼロつまり、ウィンドウ非表示ですね。

よほどタイプミスをしないことに自信があったのでしょうが、実際タイプミスしているので、今後は必ず option explicit を付けましょう。

> wshShellだと引数が上手く渡せない(PowerShell自体実行できてなさそう?)ですが、

も誤判断ですね。どういった確認をしたのですかね。
ps1ファイルの先頭に calc とか書いておけば「電卓が起動したらps1ファイルも実行されているということだ」と一発です。
    • good
    • 0

まず最初に



>wshShellだと引数が上手く渡せない(PowerShell自体実行できてなさそう?)ですが

なら、そこの確認からじゃないの
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A