このブログの読者、その多くはサラリーマンだ。ビジネス・アワーにオフィスから、検索エンジンを通じてアクセスする人が多い。担当業務に活用したい情報を求めてアクセスしているのだろう。
Windows関連のスクリプトに関する情報には、毎日数件のアクセスがある。日々のアクセス数は少ないものの、いわゆるロングテールとして長い間、アクセス流入の一つとして存在感を示している。
昨晩、20:00-24:00にかけて、旧ブログ該当エントリへの集中的なアクセスを見つけたので、このブログへ移行することにした。該当エントリは2005年の投稿だ。まだPowerShellは登場していなかった。
WMIをインスタンス化する際、指定するパスに「'」が含まれている場合、インスタンス化に失敗する。これが今回の問題だ。「'」をエスケープしなければならない。
gallery.technet.microsoft.com
set myFSO = createObject("Scripting.FileSystemObject") set myFolders = myFSO.getFolder("c:\") for each val in myFolders.SubFolders set myWMI = getObject("winmgmts:\root\cimv2:Win32_LogicalFileSecuritySetting='" & val & "'") rem ----- rem ----- やりたいこと rem ----- next
厄介なのは、FileSystemObjectではエスケープ不要だが、WMIでは必要、ということだ。
上記コードでは、FileSystemObjectであるmyFolders.SubFoldersによって取得されるフォルダ名を、valに代入している。その後、valを用いて、WMIオブジェクトを生成している。
この代入に際し、「'」を「\'」とエスケープしたフォルダ名を代入する必要があるということだ。
valに代入されたフォルダ名に「'」が含まれていると、目的とする作業が実施できないばかりか、意図しない結果を生み出してしまうこともある。