ドメイン内のすべてのサーバーをスキャンし、2つの別々のCSVファイルに出力するスクリプトがあります。1つは単純で、もう1つは広範囲です。
一度に1行ずつcsvに書き込みます。これにより、何千ものファイルを開いたり閉じたりします。私は周りに潜んでいて、最初にすべての情報を収集し、すべてを1回のスイープで書き込む必要があることを理解しています。スクリプトの終わり。しかし、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で-appendを実行できないことはわかっていますが、これを実行できる関数を使用しています。)