2015-06-17 2 views
0

Я пытаюсь создать сценарий Powershell, который выполняет следующие действия: 1) читает список файлов из txt-файла. Файл txt будет содержать путь и имя файла, например: \ Program Files (x86) \ AppName \ application.exe после прочтения списка файлов, Powershell затем считывает из другого txt-файла и импортирует список компьютеров, напримерПроверка нескольких файлов на нескольких компьютерах

pc-001 
pc-002 
pc-003 
... 

После проверки каждого компьютера для версий файлов, она затем выводит данные в текстовый файл в следующем формате:

PC-001 
\Program Files (x86)\AppName\application.exe - version details 
\Program Files (x86)\AppName\anotherfile.dll - version details 

PC-002 
\Program Files (x86)\AppName\application.exe - version details 
\Program Files (x86)\AppName\anotherfile.dll - version details 

PC-002 
\Program Files (x86)\AppName\application.exe - version details 
\Program Files (x86)\AppName\anotherfile.dll - version details 

до сих пор, я пришел к этому:

$filename = "\Program Files (x86)\application\application.exe" 

$obj = New-Object System.Collections.ArrayList 

$computernames = Get-Content C:\Computer.csv 
foreach ($server in $computernames) { 
    $filepath = Test-Path "\\$server\c$\$filename" 

    if ($filepath -eq "True") { 
    $file = Get-Item "\\$server\c$\$filename" 

    $obj += New-Object psObject -Property @{ 
       'Computer'  = $server; 
       'FileVersion' = $file.VersionInfo|Select FileVersion; 
       'LastAccessTime' = $file.LastWriteTime 
      } 
    } 
} 

$obj | select computer, FileVersion, lastaccesstime | 
    Export-Csv -Path 'c:\File_Results.csv' -NoTypeInformation 

Кто-нибудь знает, как я могу изменить файл, чтобы получить необходимую информацию в формате, указанном выше?

+0

Ваш желаемый формат вывода говорит «сведения о версии», но ваш код выбирает версию файла и последнее время записи (неверно помеченное «последнее время доступа»). Просьба уточнить, что должно содержать ваш вывод. –

ответ

0

Вы должны использовать двойной точечный классификатор, чтобы получить вложенное поле FileVersionInfo объекта в ваш $obj, как это:

$obj += New-Object psObject -Property @{'Computer'=$server;'FileVersion'=$file.VersionInfo.FileVersion;'LastAccessTime'=$file.LastWriteTime} 

Кроме того, в то время как у вас нет больше поле в ваших New-Object объектах, прерывистый select в последней строке вашего скрипта не требуется.

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