Powershell -将多个用于每个的输出组合为单个输出

bihw5rsg  于 2022-11-29  发布在  Shell
关注(0)|答案(1)|浏览(203)

大家早上好,
我还在学习powershell,并有一个脚本,我的公司运行的。我已经调整了一下,它的工作很好。但是...

    • 概述**脚本导入一个CSV文件,然后针对CSV上的每个设备登录并获取所有VIP信息,然后将其输出到带有日期和设备名称标题的CSV。

"问吧"
我想调整脚本,这样我就可以有一个单独的CSV文件,而不是50 + CSV文件,其中有一个额外的列,希望所有VIPS所在的设备名称。我该怎么做?

    • 当前脚本**
$user = "user"
$pass1 = Read-Host "Enter Netscaler Password"
$Devicelist = Import-Csv'C:\Users\user\Documents\20221110\20221109_Citrix_inventory_Master1.csv'

foreach ($device in ($Devicelist | ? { $_.fqdn -match "nsr" -and $_.State -match "Primary" -and $_.Configuration_viewable_with_Techops_login -match "Yes" })) {
    Write-Host "Attempting to connect to $($device.fqdn)"
    $SecurePassword = ConvertTo-SecureString $pass1 -AsPlainText -Force
    $Credential = New-Object System.Management.Automation.PSCredential ($user, $SecurePassword)
    $session = Connect-NetScaler -Hostname $device."IP address" -Credential $Credential -PassThru
    $nsVIPs = Get-NSLBVirtualServer | select name, ipv46, port, curstate
    $nsVIPs | Out-File C:\Users\user\Documents\20221110\VIPS\$(get-date -f yyyyMMdd)"_"$($device.fqdn)-"vips.csv"
}

当前CSV输入文件格式

当前输出文件格式

我希望输出文件格式为

**

我试过什么

**

目前除了研究之外什么都没有,我猜我需要在一个数组中保存信息,然后在最后输出它。我只是不知道如何做到这一点。
谢谢你的帮忙
尼尔

gudnpqoy

gudnpqoy1#

您可以更改代码,首先将所有数据收集到一个变量$result中,然后在循环后将所有数据写入一个CSV文件中。
要编写csv,需要使用Export-Csv,而不是Out-File,后者用于编写简单文本,而不是对象。

$user           = "user"
$pass1          = Read-Host "Enter Netscaler Password"
$SecurePassword = ConvertTo-SecureString $pass1 -AsPlainText -Force
$Credential     = New-Object System.Management.Automation.PSCredential ($user, $SecurePassword)
$today          = '{0:yyyyMMdd}' -f (Get-Date)
$Devicelist     = Import-Csv -Path 'C:\Users\user\Documents\20221110\20221109_Citrix_inventory_Master1.csv' | 
                  Where-Object { $_.fqdn -match "nsr" -and 
                                 $_.State -match "Primary" -and 
                                 $_.Configuration_viewable_with_Techops_login -match "Yes" }

$result = foreach ($device in $Devicelist) {
    Write-Host "Attempting to connect to $($device.fqdn)"
    $session = Connect-NetScaler -Hostname $device.'IP address' -Credential $Credential -PassThru
    Get-NSLBVirtualServer | 
    Select-Object name, ipv46, port, curstate, @{Name = 'Device Name'; Expression = {$device.fqdn}}
}
# now write out the csv file just once
$result | Export-Csv -Path "C:\Users\user\Documents\20221110\VIPS\$($today)_vips.csv" -NoTypeInformation

相关问题