Powershell 在 export-csv 中包含来自 import-csv 的数据

Powershell Include data from import-csv in export-csv

我正在编写一个脚本来从 CSV 文件中导入计算机列表,然后联系每台计算机,提取它们的所有证书信息,并将其导出到新的 CSV 文件中。我的脚本运行完美,但我无法让它在最终产品中包含计算机名称。我已经尝试了我可能想到的所有方法,包括创建一个新的 PSObject,尝试拉取 env:Computername,并尝试从原始 CSV 中导出名称,但没有任何效果!这将是 运行 本地在一台电脑上。

这是输入的样子:


服务器


公司名称


公司名称2


公司名称3

这里是出口: 这是虚拟数据 ![1]: http://i.stack.imgur.com/lSHXK.png

这是我需要导出的内容: 这是虚拟数据,突出显示仅供示例使用 ![2]: http://i.stack.imgur.com/IPuSt.png

我将在下面复制我的代码,但如有任何帮助,我们将不胜感激!我是 powershell 的新手,一直在自学,所以请原谅代码中的任何错误或冗余。除了不在导出中包含计算机名外,该代码已经可以完美运行。

    #Import File
    $Serverlist = Import-Csv "C:\Servers.csv"

    #Find Cert info
    Foreach ($Server in $ServerList) 
    {
    Write-Host "$Server"
    $Servername = $Server
    $Certlist = Get-ChildItem -Recurse Cert: | Select-Object Subject, Issuer, Thumbprint, FriendlyName, NotBefore, NotAfter, Extensions
    }

    #Export CSV
    $Certlist | Export-CSV C:\ServerResults.csv 

Nicky,你无法获取计算机名称,因为你 运行 它只在你的本地计算机上,你的 Get-ChildItem cmdlet 在 cert: 上工作,这是你的本地 CERT 驱动器,要查看其他计算机,您首先需要获取远程计算机 CERT 文件夹,

您可以使用此功能,然后查看我在您的脚本中制作的 changes/remarks 以了解您错过了什么。

    ## Helper Function to Get the Remote CERT PSDrive

    function Get-RemoteCert( $ComputerName=$env:computername ){

    $ro=[System.Security.Cryptography.X509Certificates.OpenFlags]"ReadOnly"

    $lm=[System.Security.Cryptography.X509Certificates.StoreLocation]"LocalMachine"

    $store=new-object System.Security.Cryptography.X509Certificates.X509Store("\$computername\root",$lm)

    $store.Open($ro)

$store.Certificates

}

    #Import File
    $Serverlist = Import-Csv "C:\Servers.csv"
    $Output = @()

    #Find Cert info
    Foreach ($Server in $ServerList) 
    {
        $Certlist = Get-RemoteCert -ComputerName $Server
        #$Certlist = Get-ChildItem -Recurse Cert: | Select-Object Subject, Issuer, Thumbprint, FriendlyName, NotBefore, NotAfter, Extensions

        Foreach ($cert in $Certlist)
        {
            $Result = "" | Select Computer,Subject, Issuer, Thumbprint, FriendlyName, NotBefore, NotAfter, Extensions
            $Result.Computer = $Server
            $Result.Subject =  $cert.Subject
            $Result.Issuer = $cert.Issuer
            $Result.Thumbprint = $cert.Thumbprint
            $Result.FriendlyName = $cert.FriendlyName 
            $Result.NotBefore = $cert.NotBefore
            $Result.NotAfter = $cert.NotAfter
            $Result.Extensions = $cert.Extensions

            $Output += $Result

        }
    }


    #Export CSV
    $Output | Export-CSV C:\ServerResults.csv 

使用 add-member 将自定义 属性 添加到从管道中出来的每个对象。 where-object 过滤掉那些没有主题的对象 属性

$ServerList | 
 ForEach-Object {
   Get-ChildItem -Recurse Cert: | Where-Object Subject -NE $null |
   Add-Member Noteproperty -Name Server -Value $_ -PassThru

  } |  Select-Object Server,Subject, Issuer, Thumbprint, FriendlyName, NotBefore, NotAfter, Extensions |
       Export-csv -Path C:\temp\mycsv.csv -NoTypeInformation