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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
windowsでテキストファイルの各行に書かれているパスのファイルを一斉にコピーしたい
その他(プログラミング・Web制作)
-
C言語をコンパイルするとコンピュータ上でどう動くかというコードになるみたいな説明をよく聞くのですがこ
C言語・C++・C#
-
VBA 電話番号の正規表現について
その他(プログラミング・Web制作)
-
-
4
C言語について。
C言語・C++・C#
-
5
ものづくりに向いているプログラミング言語ってなんですか?家電にもプログラミングが使われてるとか
その他(プログラミング・Web制作)
-
6
double型が正常に認識されていない恐れ
C言語・C++・C#
-
7
テキストファイルのファイル名を抽出してBAT処理する方法はありますか。
その他(プログラミング・Web制作)
-
8
楽しくて最高のプログラミング言語を作りたいのですが、そもそもプログラミング言語を作る意味なんてないと
その他(プログラミング・Web制作)
-
9
プログラマーと学歴の関係性について
その他(プログラミング・Web制作)
-
10
mallocについて
C言語・C++・C#
-
11
インクリメント演算子のみを用いて、下に表示されるようにプログラムします 99 100 102 103
C言語・C++・C#
-
12
応用情報技術者試験の令和元年秋、午後のプログラムの問題がわからないです。
C言語・C++・C#
-
13
プログラミングについて。 1つのループで Aという計算と Bという計算をするのと これらを分けて2つ
C言語・C++・C#
-
14
プログラムの素朴な質問です 分岐するコードを書く時に、 /** * 関数 */ sub(){ ...
その他(プログラミング・Web制作)
-
15
ホワイトハッカー
その他(プログラミング・Web制作)
-
16
C言語の関数と配列に関する質問
C言語・C++・C#
-
17
あなたは、Excelはどうやって学びましたか?
C言語・C++・C#
-
18
ハッシュテーブル(連想配列)が、キーのリストと値のリストを返すような実装の時、これらの位置が対応関係
その他(プログラミング・Web制作)
-
19
プログラミング、アーキテクチャ好きに質問です。 kotlinなどのMVVM、単方向データフローの考え
その他(プログラミング・Web制作)
-
20
Webプログラムってネイティブアプリプログラムに比べて遥かに簡単すぎる気がするのですが気の所為ですか
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルvbaでdocuworksprinter...
-
バッチファイル 二つ上のディ...
-
VBS パスに変数を入れたい
-
ExcelVBAの使い方 ¥の使い方...
-
EXCEL(VBA)で指定フォルダ内の...
-
xcopyコマンドの進行状況を表示...
-
VBAでパワーシェルを実行したい...
-
A列に記載されているフォルダ...
-
初心者powershellのPS1ファイル...
-
【VB.NET】App.configにファイ...
-
リストボックスにファイル名の...
-
指定したフォルダ内の最新ファ...
-
【VBA】ExcelマクロでCSVファイ...
-
Excel 相対パス
-
Eclipse
-
C#でのProcess.Startと変数path
-
Access2000のテーブルにPDFファ...
-
SaveAsの保存先について
-
エクセルのマクロで特定フォル...
-
Excel VBAでテキストファイルを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
xcopyコマンドの進行状況を表示...
-
【VBA】ExcelマクロでCSVファイ...
-
EXCEL(VBA)で指定フォルダ内の...
-
エクセルのマクロで特定フォル...
-
パスワード保護されたExcelファ...
-
ExcelVBAの使い方 ¥の使い方...
-
開いているファイルを削除し、...
-
SaveAsの保存先について
-
初心者powershellのPS1ファイル...
-
VBA★PDFをPDFアプリで印刷し...
-
fopenでのパス指定
-
【Excel VBA】Power Qurry のソ...
-
指定したフォルダ内の最新ファ...
-
A列に記載されているフォルダ...
-
ExcelのVBAで上書き保存を確...
おすすめ情報