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
我正在编写一个脚本来从 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