我正在尝试从文件中读取计算机名称列表,并扫描每个目录中的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”之后添加了一个空格,这是我列表中的第一项。我检查了文件,每行末尾没有多余的空格。
我试过用双引号括起路径,但结果是一样的。我错过了什么或者是否无法在路径中使用变量?
答案 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