首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在export-csv中记录错误时出现问题

在export-csv中记录错误时出现问题
EN

Stack Overflow用户
提问于 2019-12-19 11:37:56
回答 1查看 84关注 0票数 0

我有powershell脚本来下载hotfixID,installedon,lastbootuptime和C盘中的空闲空间。(我用谷歌搜索了一下,更改了几个我需要的东西。)当Pc不可达时,它将

代码语言:javascript
复制
Write-Warning "$_ cannot be reached, skipping." 

我还想将故障PC的计算机名称捕获到我的CSV中。我试过了

代码语言:javascript
复制
| Export-Csv C:\test\computerDetails.csv -NoTypeInformation 

或者append,但看起来好像不起作用。有人能帮帮忙吗?下面是我的整个脚本。

代码语言:javascript
复制
(Get-Content C:\test\serverlist.txt).Trim() | ForEach {

    If (Test-Connection -ComputerName $_ -Count 1 -Quiet) 
    {

        $update = Get-CimInstance Win32_QuickFixEngineering -ComputerName $_ | Sort-Object InstalledOn -Descending | Select-Object -First 1
        $os = Get-CimInstance win32_operatingsystem -ComputerName $_
        $disk = Get-WmiObject Win32_LogicalDisk -ComputerName $_ -Filter "DeviceID='C:'"

        $props = @{
            ComputerName = $_
            HotFixID = $update.HotFixID
            InstalledOn = $update.InstalledOn
            lastbootuptime = $os.LastBootUpTime
            FreeSpace_GB = $disk.FreeSpace / 1GB
        }
        New-Object PsObject -Property $props
    } 
    Else {
           Write-Warning "$_ cannot be reached, skipping." | Export-Csv C:\test\computerDetails.csv -NoTypeInformation
                }

} | Sort ComputerName |
        Select ComputerName,HotFixID,InstalledOn,lastbootuptime,FreeSpace_GB |
            Export-Csv C:\test\computerDetails.csv -NoTypeInformation
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-19 12:04:11

将它添加到CSV的主要问题是它是一个字符串。如果您将错误的机器视为成功的机器,那么您可以将它们放入相同的CSV中。

我在其中添加了一个ArrayList作为存储变量,然后为每台计算机创建一个temp PSObject来存储您的结果,覆盖每个循环的变量,但在结束时将变量转储到ArrayList中以供导出。

代码语言:javascript
复制
$Errors = New-Object System.Collections.ArrayList
(Get-Content C:\test\serverlist.txt).Trim() | ForEach {
    $Temp = New-Object -TypeName PSObject
    If (Test-Connection -ComputerName $_ -Count 1 -Quiet) {
        $update = Get-CimInstance Win32_QuickFixEngineering -ComputerName $_ | Sort-Object InstalledOn -Descending | Select-Object -First 1
        $os = Get-CimInstance win32_operatingsystem -ComputerName $_
        $disk = Get-WmiObject Win32_LogicalDisk -ComputerName $_ -Filter "DeviceID='C:'"

        $props = [ordered]@{
            ComputerName   = $_
            HotFixID       = $update.HotFixID
            InstalledOn    = $update.InstalledOn
            lastbootuptime = $os.LastBootUpTime
            FreeSpace_GB   = $disk.FreeSpace / 1GB
            Error          = "Success"
        }
        $Temp | Add-Member -NotePropertyMembers $props -TypeName temp
    } Else {
        $props = [ordered]@{
            ComputerName   = $_
            Error          = "Cannot be reached"
        }
        $Temp | Add-Member -NotePropertyMembers $props -TypeName temp
        Write-Warning "$_ cannot be reached, skipping."
    }
    $Errors.Add($Temp) > $null
}
 $Errors | Export-Csv C:\temp\computerDetails.csv -NoTypeInformation -Append
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59402992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档