
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件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
vbNormalFocus を vbNomalFocus とタイプミスしているので、
未定義変数になり値ゼロつまり、ウィンドウ非表示ですね。
よほどタイプミスをしないことに自信があったのでしょうが、実際タイプミスしているので、今後は必ず option explicit を付けましょう。
> wshShellだと引数が上手く渡せない(PowerShell自体実行できてなさそう?)ですが、
も誤判断ですね。どういった確認をしたのですかね。
ps1ファイルの先頭に calc とか書いておけば「電卓が起動したらps1ファイルも実行されているということだ」と一発です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) VBA バックグラウンドで別ブックを開いてデータ転記 3 2024/04/04 14:24
- Visual Basic(VBA) VBA 1 2024/02/03 22:51
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 一つのフォルダーに50個のエクセルファイルがあります。 各ファイルにはAとBのシートがあります。 5 2 2023/10/03 16:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBA ファイル名取得 3 2024/02/18 13:24
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
このQ&Aを見た人はこんなQ&Aも見ています
-
excel vbaから実行するexe実行の黒い画面の非表示
Visual Basic(VBA)
-
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
-
4
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
5
VBAでActiveDirectoryのユーザ一覧の取得の仕方
Visual Basic(VBA)
-
6
VBAのExecメソッドで画面を非表示にして実行する方法
Visual Basic(VBA)
-
7
PowerShellを使って関連付けられたアプリケーションでファイルを開く時のエラー
Excel(エクセル)
-
8
Excel マクロでShearePoint先のフォルダ指定
Excel(エクセル)
-
9
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
10
【ExcelVBA】各セルをダブルクォーテーションで括ってCSV保存したい
Visual Basic(VBA)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
13
Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない
Excel(エクセル)
-
14
フォルダ、ファイルのアクセス権設定状態を確認したい
ネットワーク
-
15
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
16
動的配列が存在(要素が有る)か否かを判定できますか?
Visual Basic(VBA)
-
17
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
18
Access VBA で フォルダ権限をチェックする
Visual Basic(VBA)
-
19
HTMLからフォルダを開きたい
HTML・CSS
-
20
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
Excel 相対パス
-
エクセルVBAで一つ上の階層...
-
xcopyコマンドの進行状況を表示...
-
コマンドプロンプトのコピー関...
-
C#でのProcess.Startと変数path
-
ExcelVBAの使い方 ¥の使い方...
-
実行ファイルのパスを取得したい
-
VBA★PDFをPDFアプリで印刷し...
-
初心者powershellのPS1ファイル...
-
パスワード保護されたExcelファ...
-
Eclipse
-
指定したフォルダ内の最新ファ...
-
SaveAsの保存先について
-
【VBA】複数のtxtファイルから...
-
ブラウザからファイルパスを取...
-
アクセス 自身のデータベース...
-
エクセルのマクロで特定フォル...
-
開いているファイルを削除し、...
-
コマンドプロンプトでファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
xcopyコマンドの進行状況を表示...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
【VBA】ExcelマクロでCSVファイ...
-
エクセルのマクロで特定フォル...
-
実行ファイルのパスを取得したい
-
コマンドプロンプトのコピー関...
-
VBA★PDFをPDFアプリで印刷し...
-
VBAでパワーシェルを実行したい...
-
ExcelVBAの使い方 ¥の使い方...
-
C#でのProcess.Startと変数path
-
ExcelのVBAで上書き保存を確...
-
開いているファイルを削除し、...
-
アプリケーションのインストー...
-
【VBA】複数のtxtファイルから...
-
EXCEL(VBA)で指定フォルダ内の...
-
fopenでのパス指定
-
パスワード保護されたExcelファ...
おすすめ情報