【问题标题】:Powershell Include data from import-csv in export-csvPowershell 将 import-csv 中的数据包含在 export-csv 中
【发布时间】:2016-01-07 10:15:52
【问题描述】:

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

这是输入的样子:


服务器


公司名称


公司名称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 

【问题讨论】:

    标签: powershell csv import export-to-csv


    【解决方案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
    

    【讨论】:

    • 这非常有效,并为我提供了所需的输出。非常感谢!
    【解决方案2】:

    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 
    

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 2018-06-03
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多