Get-ChildItem不一致的行为,在路径中使用变量时插入空格

时间:2014-11-13 19:43:47

标签: powershell get-childitem

我正在尝试从文件中读取计算机名称列表,并扫描每个目录中的DLL文件。基本上,我希望它扫描PC上每个用户的个人目录,并在.. \ AppData \ Roaming \目录中查找任何DLL文件。

这无论如何都不优雅,但我是PowerShell的新手:

#runs DSQuery to get a list of machine names and export to a text file
c:\temp\get_pc_list.bat

$pcList = Get-Content c:\temp\pc_list.txt

#Removes a blank space at the end of each item in the text file
$pcList | foreach {$_.TrimEnd()} | Set-Content c:\temp\pc_list.txt

del C:\temp\file_check.txt

foreach ($computer in $pcList)
    {
        Get-ChildItem \\$computer\c$\users\*\AppData\Roaming\*.dll -recurse | Out-File -encoding unicode $("C:\temp\file_check.txt") -append -noclobber
    }

当我运行它时,我收到一条消息“指定路径上的对象\ PC101 \ c $ \ users不存在。”它似乎在“PC101”之后添加了一个空格,这是我列表中的第一项。我检查了文件,每行末尾没有多余的空格。

我试过用双引号括起路径,但结果是一样的。我错过了什么或者是否无法在路径中使用变量?

1 个答案:

答案 0 :(得分:1)

为什么不使用AD-GetComputer将所有PC名称拉入变量?

您也可以使用export-csv,这样可以更好地为您服务:

$Computers= Get-ADComputer  -Filter * -SearchBase "ou=accounting,dc=domain,dc=com" -Properties * |     
Select  -ExpandProperty name 

foreach ($computer in $Computers)
    {

    Get-ChildItem \\$computer\c$\users\*\AppData\Roaming\*.dll -recurse | Export-Csv    
    C:\temp\file_check -append -noclobber
     }

要仅返回DLL的名称,可以将Get-ChildItem行更改为:

     Get-ChildItem \\$computer\c$\users\*\AppData\Roaming\*.dll -recurse | Select-Object Name | Export-Csv    
     C:\temp\file_check -append -noclobber