ユーザー JPBlanc などは、このような問題に対して優れたソリューションを提供しています。
Set Args = Wscript.Arguments
'MsgBox "Chemin LDAP: " & Args(0)
'MsgBox "Classe: " & Args(1)
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nologo -Noninteractive -file c:\SlxRH\RhModif.ps1 " & chr(34) & Args(0) & chr(34) , 0
私はそのような解決策をテストしましたが、うまくいきました。ただし、私の問題は、「-file」オプションの引数として識別されたファイルパスに空白が含まれている場合に関係しています。たとえば、上記のコード例のファイル パスが次の場合:
c:\Slx RH\RhModif.PS1
ファイル パスの空白に注意してください。問題は、ファイル パスを正しくエスケープする方法です。これを行う方法が見つかりませんでした(機能させるため)。
私はこのサイトと一般的な「インターウェブ」を検索し、VBscript と Wscript という 2 つのレベルのスクリプト解釈が行われていることを (私が思うに) 学びました。別の非常に良い例を次に示します (このタイトルのフル ページへのリンク)。
PowerShell で WinForm GUI を使用してスケジュールされたタスクを実行する
Dim objShell
Set objShell=CreateObject("WScript.Shell")
strExpression="get-date | add-content c:\temp\test.txt"
strCMD="powershell -sta -noProfile -NonInteractive -nologo -command " & Chr(34) & "&{" & strExpression &"}" & Chr(34)
objShell.Run strCMD,0
私はこれをテストしましたが、うまくいきます。「-file」オプションを使用していませんが、この例では、strCMD 変数に「-command」または「-file」入力を入力する一般的な方法を示しています (ご想像のとおり)。ただし、次のコードを使用すると機能しません。
Dim objShell
Set objShell=CreateObject("WScript.Shell")
strExpression="C:\aP_RDB\Set Up\SimpleInsert.PS1"
strCMD="powershell -noprofile -executionpolicy Unrestricted -NonInteractive -file " & Chr(34) & "&{" & strExpression &"}" & Chr(34)
objShell.Run strCMD,0
上記の例では、基本的に上記のコード参照を (およびリストされたリンクから) コピーし、PS コマンドを変数 strExpression のファイル パス (空白を含む) に置き換え、"-command " 引数と "-file" 引数。ただし、エラー メッセージは、認識されない引数「c:\aP_RDB\Set」を指しています。つまり、パス全体「C:\aP_RDB\Set Up\SimpleInsert.PS1」が表示されません。引用符(または何か)のエスケープが機能していないようです...もっとよく言えば、私はそれを正しく行っていません。
思慮深いアドバイスをいただければ幸いです。参考までに: Powershell で-WindowStyle Hiddenオプションを試しました。多くの人が、Windows プラットフォーム間で一貫したアプローチではないことを発見したようです (より具体的には、私にとっては、機能させることができませんでした)。