我正在编写一个脚本,用于从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
答案 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