【问题标题】:Issue with export-csv no data?export-csv 没有数据的问题?
【发布时间】:2017-11-30 03:04:07
【问题描述】:

在我的报告中,当我删除 export-csv 部分时,数据会正确显示在屏幕上,当我添加 export-csv 时,不会导出任何数据,但会创建文件。下面是我的脚本,以及当脚本运行(修改)数据的样子时数据的样子。

#Get all DHCP Servers
$ServerList = (Get-Content -Path "\\termserv\DHCPServers.txt")
foreach ($server in $serverlist)
{
#Get the scopes from each serve
     Get-DHCPServerv4Scope -ComputerName $server | select ScopeID | 
#Get the lease information for each scope
     ForEach-Object {Get-DHCPServerv4Lease -ScopeId $_.ScopeId -ComputerName 
     $server -AllLeases  | 
        where {$_.AddressState -like "*Reservation"} | Select-Object 
        $server,ScopeId,IPAddress,HostName,ClientID,AddressState | Export-
        Csv "\\termserv\d$\term\User\Reservations1.csv"
   }
  }

在没有 export-csv 的情况下导出的数据是什么样的

NOPEDH01: 范围标识:000.11.2.3 IP地址:111.22.3.444 主机名:NOPE00112233 客户编号:00-11-22-33-44-55 地址状态:ActiveReservation

NOPEDH01: 范围标识:000.11.2.3 IP地址:111.22.3.445 主机名:NOPE0011223344 客户编号:00-11-22-33-44-56 地址状态:ActiveReservation

更新:尝试过,但仍然没有,当我在我的 DH 服务器上本地运行脚本的修改版本时,它可以正常运行,但我正在查看我的环境中的近 100 台 DH 服务器,见下文

Get-DHCPServerV4Scope | ForEach {

Get-DHCPServerv4Lease -ScopeID $_.ScopeID -AllLeases | where 
{$_.AddressState -like '*Reservation'}

} | Select-Object ScopeId,IPAddress,HostName,ClientID,AddressState | Export-
Csv "\\termserv\d$\term\$($env:COMPUTERNAME)-Reservations1.csv" -
NoTypeInformation

【问题讨论】:

    标签: excel powershell csv


    【解决方案1】:

    这是你正在做的事情的代表:

    Foreach ($Server in $ServerList)
    {
        Foreach ($Scope in $ScopeList)
        {
            $Data | Export-csv -Path FileName.csv
        }
    }
    

    这样做会导出数据[(Total Servers) x (Total Scopes per server)] 次,这是很多 I/O 操作。这只是一个物流问题。您可以在导出之前将整个信息收集到一个表对象中。但该决定取决于您和您的特定业务需求。

    然而,真正的问题是,您正在导出到同一个文件,该文件基本上覆盖了您之前编写的任何内容,而没有告诉它不要这样做。所以只有最后一个出口仍然存在,我怀疑它是空白的。

    在导出时尝试使用-Append 开关。

    $Data | Export-csv -Path FileName.csv -NoTypeInformation -Append
    

    我还注意到您在select-object cmdlet 中使用了$server 变量,您应该只使用对象的属性名称而不是变量名称。我不知道这是否会返回任何内容,因为 cmdlet 不知道如何处理它,这也可能导致问题。

    【讨论】:

    • 您也可以通过使用 out-File 而不是 csv 将其发送到 txt 文件来解决它。 csv 假定您的数据符合某个对象结构。 txt 文件并没有那么成见。
    【解决方案2】:

    根据您的代码,您在foreach-object 中使用Export-Csv。一般Export-csv 会创建一个包含新数据的 csv 文件。如果数据已经存在于 csv 文件中,那么它将用新数据覆盖现有数据。 所以不要使用

    Export-Csv "\\termserv\d$\term\User\Reservations1.csv"
    

    你可以使用

    Export-Csv "\\termserv\d$\term\User\Reservations1.csv" -Force -Append -NoTypeInformation
    

    此处-Append 将在 csv 文件中附加数据。不覆盖。

    【讨论】:

    • 你没有添加-Append
    • 我做了并得到了错误“附加的对象没有对应于以下列的属性:GJKZDH01。要继续使用不匹配的属性,请添加 -Force 参数,然后重试该命令。 "
    • 答案就在你的错误中。在该行中添加-Force
    • 没问题。 :)。
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2021-11-01
    • 2016-01-07
    相关资源
    最近更新 更多