Создать один отчет из двух отдельных коллекций - PullRequest
0 голосов
/ 26 июня 2018

Мне не хватает чего-то фундаментального в PowerShell.

У меня есть скрипт, который генерирует две коллекции, имена компьютеров с информацией о версии конкретного приложения и отдельный список имен пользователей, который берется из списка имен компьютеров, потому чтоимена пользователей указаны в именах компьютеров, например имя компьютера:

XXXXXX02jbloggs

Владельцем этого компьютера является jbloggs, а jbloggs является допустимым объектом AD, который имеет полное имя joe blogs.

Конечной целью скрипта является создание отчета с именами компьютеров, владельцем SamAccountName, полным именем и подробностями приложения, которые скрипт специально проверяет.

Например,

какие версии Adobe Reader существуют на этом диапазоне машин

Пока у меня есть:

$ErrorActionPreference = "SilentlyContinue"

$Computers = Get-ADComputer -Server BlahBlah.com -Filter {name -like "XXXXXX02*"} | 
Select-Object -ExpandProperty Name

$Users = $Computers -Replace '\D*\d*(\w*)', '$1'

$Results = foreach ($Computer in $Computers) {
    Get-CimInstance -ComputerName $Computer -ClassName Win32_Product | 
    Where-Object{$_.Name -like "*Adobe Reader*"} | 
    Select-Object PSComputerName, Name, Version, InstallDate 
}

$FullNames = ForEach ($user in $Users) {
    Get-ADUser -Server BlahBlah.com -Identity $User -Properties * | 
    Select-Object -ExpandProperty Name
} 
  • $Results получает менясписок имен компьютеров, Adobe Reader xxx, версия и дата установки.
  • $FullNames получает мне список полных имен на основе их идентификаторов пользователя

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

Вот почему я говорю, что мне не хватает чего-то фундаментального в PowerShell, яискали пользовательские объекты, вложенные циклы и другие идеи, но безрезультатно.Действительно ищу несколько советов по этому типу проблемы, так как я привел несколько похожих примеров.Любой совет будет принята с благодарностью.

1 Ответ

0 голосов
/ 26 июня 2018
  • Получите одного текущего пользователя внутри foreach($computer in $Computers) вместо создания двух отдельных foreach.
  • Добавьте вычисляемое свойство в выборку, чтобы включить FullName в $ Result

$ErrorActionPreference = "SilentlyContinue"

$Computers = Get-ADComputer -Server BlahBlah.com -Filter {name -like "XXXXXX02*"} | 
Select-Object -ExpandProperty Name

$Results = foreach ($Computer in $Computers) {
    $User = $Computer -Replace '\D*\d*(\w*)', '$1'
    $FullName = (Get-ADUser -Server BlahBlah.com -Identity $User -Properties *).Name

    Get-CimInstance -ComputerName $Computer -ClassName Win32_Product | 
    Where-Object{$_.Name -like "*Adobe Reader*"} | 
    Select-Object PSComputerName, Name, Version, InstallDate,@{n='FullName';e=@{$FullName}}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...