Web Analytics

Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

「'」のエスケープは忘れずに

このブログの読者、その多くはサラリーマンだ。ビジネス・アワーにオフィスから、検索エンジンを通じてアクセスする人が多い。担当業務に活用したい情報を求めてアクセスしているのだろう。

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に代入されたフォルダ名に「'」が含まれていると、目的とする作業が実施できないばかりか、意図しない結果を生み出してしまうこともある。