gpt4 book ai didi

powershell - 通过几个foreach收集信息,然后在脚本末尾导出export-csv

转载 作者:行者123 更新时间:2023-12-03 00:30:59 30 4
gpt4 key购买 nike

我有一个脚本,可以扫描域中的所有服务器并将其输出到两个单独的CSV文件-一个简单文件,另一个扩展文件。

我一次向csv写了一行。这导致成千上万个文件打开和文件关闭。.我潜伏着,明白我应该首先收集所有信息并将其全部写成一遍。脚本的结尾。但是,如何使用export-csv(最好使用函数)来做到这一点?

有没有一种方法可以对短列表和长列表使用相同的功能?

该脚本在每个域/服务器上执行许多任务,但是为了您的浏览愉悦,我将其缩减为:

$domains = "no","se","dk"

# Loop through specified forests
foreach ($domain in $domains) {

# List all servers
$servers = Get-QADComputer

# Looping through the servers
foreach ($server in $servers) {

# GENERATE LONGLIST #
# Ping server
if (Test-Connection -ComputerName $server.name -count 1 -Quiet )
{
$Reachable = "Yes"

# Fetch IP address
$ipaddress = [System.Net.Dns]::GetHostAddresses($Server.name)|select-object IPAddressToString -expandproperty IPAddressToString

# Formatting output and export all info to CSV
New-Object -TypeName PSObject -Property @{
SystemName = ($server.name).ToLower()
Reachable = $Reachable
Domain = $server.domain
IPAddress = $IPAddress
} | Select-Object SystemName,Domain,IPAddress| Export-Csv -Path "longexport.csv" -append
}
else # Can't reach server
{
$reachable = "No"
$IPAddress = "Unknown"

# Formatting output and export all info to CSV
New-Object -TypeName PSObject -Property @{
SystemName = ($server.name).ToLower()
Reachable = $Reachable
Domain = $server.domain
} | Select-Object SystemName,Domain,IPAddress| Export-Csv -Path "shortexport.csv" -append
}
}
}

(让我只说我知道我不能做-加上export-csv,但是我使用的函数让我做到这一点。)

最佳答案

您正在将相同数量的属性导出到每个文件,所以我不确定我为什么理解其中一个被认为长而又短的原因。无论如何,我建议以下做法,不要将所有计算机都分配给一个变量,它会占用大量RAM,而是使用流式传输方式(一次一个对象)并使用foreach-object。另外,由于我发现文件中没有差异,因此在每个域操作结束时输出到文件(每个域一个)。而使用另一种方式,您只能向该文件写入一次。

$domains = "no","se","dk"

foreach ($domain in $domains) {

Get-QADComputer -Service $domain -SizeLimit 0 | Foreach-Object {

$reachable = Test-Connection -ComputerName $_.Name -count 1 -Quiet

if($reachable)
{
$IPAddress = [System.Net.Dns]::GetHostAddresses($_.Name)|select-object IPAddressToString -expandproperty IPAddressToString
}
else
{
$IPAddress = $null
}


New-Object -TypeName PSObject -Property @{
SystemName = $_.Name.ToLower()
Reachable = $reachable
Domain = $_.Domain
IPAddress = $IPAddress
} | Select-Object SystemName,Domain,IPAddress

} | Export-Csv -Path export.csv -Append
}

关于powershell - 通过几个foreach收集信息,然后在脚本末尾导出export-csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383762/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com