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

时间:2015-10-09 12:46:36

标签: powershell csv import export-to-csv

我正在编写一个脚本,用于从CSV文件导入计算机列表,然后联系每台计算机,提取所有证书信息,然后将其导出到新CSV。我所使用的脚本完美无缺,但我无法在最终产品中包含计算机名称。我已经尝试了一些我可以想到的内容,包括创建一个新的PSObject,尝试拉动env:Computername,并尝试从原始CSV导出名称,但没有任何工作!这将在一台PC上本地运行。

以下是输入内容:

服务器

COMPNAME

Compname2

Compname3

这是出口: 这是虚拟数据   ![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 

2 个答案:

答案 0 :(得分:1)

使用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

答案 1 :(得分:0)

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

您可以使用此功能,然后查看我在脚本中所做的更改/备注,以了解您错过的内容。

    ## 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