Powershell Shell.Application对象找不到文件夹

时间:2017-08-14 14:31:02

标签: powershell filesystems metadata comobject

我正在尝试从文件中获取元数据。我使用的代码示例here

下面是我用来尝试访问任何文件夹的一些示例代码,因为我似乎无法这样做:

$TheThing = "C:\Windows"

$folder = {$TheThing}

foreach($sFolder in $folder) 
  { 
   $a = 0 
   $objShell = New-Object -ComObject Shell.Application 
   $objFolder = $objShell.NameSpace($folder)

   foreach ($File in $objFolder.items()) 
    {  
     $FileMetaData = New-Object PSOBJECT 
      for ($a ; $a  -le 266; $a++) 
       {  
         if($objFolder.getDetailsOf($File, $a)) 
           { 
             $hash += @{$($objFolder.getDetailsOf($objFolder.items, $a))  = 
                   $($objFolder.getDetailsOf($File, $a)) } 
            $FileMetaData | Add-Member $hash 
            $hash.clear()  
           } #end if 
       } #end for  
     $a=0 
     $FileMetaData 
    } #end foreach $file 
  } #end foreach $sfolder 

该行:

$objFolder = $objShell.NameSpace($folder)

......实际上并没有做任何事情。实际上,当代码进入foreach循环时,它会失败并显示“你无法在空值表达式上调用方法”错误:

foreach ($File in $objFolder.items()) 

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

此行导致您的问题:

$folder = {$TheThing}

需要:

$folder = $TheThing

通过使用{ },您可以将其设为scriptblock,因为您只需要将其作为包含您想要询问的路径的字符串。

你也可以把路径放在那里而不是为了一个目的而有两个变量。