从两个单独的集合创建一个报告

Ian*_*anB 4 powershell

我在PowerShell中遗漏了一些基本内容.

我有一个生成两个集合的脚本,计算机名称包含特定应用程序的版本详细信息,以及从计算机名称列表中获取的单独用户名列表,因为用户名在计算机名称中,例如计算机名称为:

XXXXXX02jbloggs
Run Code Online (Sandbox Code Playgroud)

此计算机的所有者是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
} 
Run Code Online (Sandbox Code Playgroud)
  • $Results 给我一个计算机名称列表,Adobe Reader xxx,版本和安装日期.
  • $FullNames 根据用户ID获取全名列表

我不知道如何构造脚本,因此它生成全名,用户名,计算机名,应用程序名称和安装日期.

这就是为什么我说我在PowerShell中缺少一些基本的东西,我一直在寻找自定义对象,嵌套循环和其他想法,但无济于事.真的在寻找关于这类问题的一些建议,因为我需要完成几个类似的例子.任何建议将不胜感激.

小智 5

  • 获取单个当前用户,foreach($computer in $Computers)而不是创建两个单独的foreach.
  • 将计算属性添加到select中以包含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}}
}
Run Code Online (Sandbox Code Playgroud)