Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用powershell格式化CSV文件输出_Powershell_Csv - Fatal编程技术网

使用powershell格式化CSV文件输出

使用powershell格式化CSV文件输出,powershell,csv,Powershell,Csv,我编写了以下代码,将证书详细信息存储在csv文件中。它可以工作,但在csv文件的每一行中,开头的符号@{和结尾的符号}都会被写入。在包含标题的第一列中,符号=也会被写入。因此,我不知道如何在没有这些符号的情况下填充我的csv文件 这是我写的代码 $StartDate = Get-Date $CertPath = 'Cert:\LocalMachine\' $CertsDetail = Get-ChildItem -Path $CertPath -Recurse | Where-Obje

我编写了以下代码,将证书详细信息存储在csv文件中。它可以工作,但在csv文件的每一行中,开头的符号
@{
和结尾的符号
}
都会被写入。在包含标题的第一列中,符号
=
也会被写入。因此,我不知道如何在没有这些符号的情况下填充我的csv文件

这是我写的代码

$StartDate = Get-Date
 $CertPath = 'Cert:\LocalMachine\'

  $CertsDetail =  Get-ChildItem -Path $CertPath -Recurse | Where-Object {$_.PsIsContainer -ne $true } | ForEach-Object {                               
   $DaysLeft = (New-TimeSpan -Start $StartDate -End $_.NotAfter).Days
   If ($DaysLeft -lt 30) {
    $Under30 = $true
    $Text = "The Certificate is but valid about to expire"
}
Else {
    $Under30 = $false
}
If ($DaysLeft -lt 1) {
    $Expired = $true
    #$Not_Expired = $false
    $Text = "The Certificate is expired"
}
Else {
    $Expired = $false
    #$Not_Expired = $true
    $Text = "The Certificate is still valid and not going soon to expire"
}
[pscustomobject]@{Text=$Text;`
                Subject = $_.Subject;`
                ExpireDate = $_.NotAfter;`
                DaysRemaining = $DaysLeft;`
                Under30Days = $Under30;`
                Expired = $Expired;`
                #Not_Expired = $Not_Expired
                }

                }
         $obj = [PSCustomObject] @{
         'Example Header 1' = $null
         'Example Header 2' = $null
         'Example Header 3' = $null
         'Example Header 4' = $null 
         'Example Header 5' = $null 
         'Example Header 6' = $null 


$obj | Add-Content -Path 'C:\Users\hanna\Desktop\certificate.csv'
$CertsDetail | Add-Content -Path 'C:\Users\hanna\Desktop\certificate.csv'

试着这样做:

$StartDate = Get-Date
$CertPath = 'Cert:\LocalMachine\'
$CertsDetail = Get-ChildItem -Path $CertPath -Recurse | 
    Where-Object { $_.PsIsContainer -ne $true } | ForEach-Object {                               
    $DaysLeft = (New-TimeSpan -Start $StartDate -End $_.NotAfter).Days
    if ($DaysLeft -lt 1) {
        $Under30 = $true
        $Expired = $true
        $Text = "The Certificate is expired"
    }
    elseif ($DaysLeft -lt 30) {
        $Under30 = $true
        $Expired = $false
        $Text = "The Certificate is but valid about to expire"
    }
    else {
        $Under30 = $false
        $Expired = $false
        $Text = "The Certificate is still valid and not going soon to expire"
    }
    [PSCustomObject]@{
        Text = $Text
        Subject = $_.Subject
        ExpireDate = $_.NotAfter
        DaysRemaining = $DaysLeft
        Under30Days = $Under30
        Expired = $Expired
    }
}
$CertsDetail | Export-Csv -Path 'C:\Users\hanna\Desktop\certificate.csv'

$obj
的作用是什么?[1]删除整个
$obj
部分&以
$obj | Add Content
开头的行。[2] 将
$CertsDetail |
行更改为使用
导出CSV
而不是
添加内容
。[3] 阅读
获取帮助导出CSV
中的帮助。。。[咧嘴笑]它可以工作,但仍然有两件事:1->#键入System.Management.Automation.PSCustomObject出现在文件的头部2->以隐藏格式写入的过期日期(######)我还想知道如何使列的大小与内容相匹配,以摆脱
#TYPE System.Management.Automation.PSCustomObject
只需将
-NoTypeInformation
添加到
导出Csv
中,如下所示:
导出Csv-Path“C:\Users\hanna\Desktop\certificate.csv”-NoTypeInformation
如果调整列的大小(假设您在Excel中查看csv),是否允许您查看过期日期?