2014-11-13 3 views
1

Я пытаюсь прочитать список имен компьютеров из файла и сканировать каждый из файлов DLL в определенном наборе каталогов. В принципе, я хочу, чтобы он просматривал личный каталог каждого пользователя на ПК и искал любые DLL-файлы в каталоге .. \ AppData \ Roaming \.Непоследовательное поведение Get-ChildItem, вставляя пробел при использовании переменной в пути

Это не элегантный любыми средствами, но я новичок в 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 \ с $ \ пользователей не существует ». Похоже, что он добавляет пробел после «PC101», который является первым элементом в моем списке. Я проверил файл, нет лишних пробелов в конце каждой строки.

Я попытался включить путь в двойные кавычки, но результат тот же. Я что-то пропустил или не могу использовать переменную в пути?

+0

Не могли бы вы вывести вывод '[Regex] :: Escape ($ computer)' в цикле 'foreach'? – briantist

+1

попробовал 'Get-ChildItem \\ $ computer.trim() \ c $ \ users \ * \ AppData \ Roaming \ *. Dll' allready? – Paul

+0

Myguess - это DSQ 上 ry возвращает некоторые имена с пробелом перед символом возврата строки (что разделяет имена ПК). Используйте либо обрезку, либо ADComputer/QADComputer, чтобы работать непосредственно с объектами PowerShell из AD, помогли бы ... –

ответ

1

Почему вы не используете AD-GetComputer, чтобы вывести все имена ПК в переменную?

Вы также можете использовать экспорт 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 
+1

Я думаю, что это в конечном итоге то, что я должен буду сделать. Я прихожу в среду без ADWS, поэтому я думаю, что буду настаивать на этом. Спасибо за предложение. – workBench

 Смежные вопросы

  • Нет связанных вопросов^_^