我正在运行PowerShell脚本,以从vSphere中提取服务器信息并将其插入SQL Server。一些vSphere用户正在Notes字段中使用返回行。这可能很烦人,所以我尝试将换行符替换为',',如下所示:
$Report.Notes = $VM | Select-Object -ExpandProperty Notes | Foreach-Object {$_ -Replace "`r", ", "}
脚本完成并创建一个.csv文件,其中包含服务器列表以及一些字段。
接下来,我想在插入SQL Server之前在csv中的字段周围删除“”,因此我将其作为单独的脚本运行:
${C:\Temp\VMReport.csv} = ${C:\Temp\VMReport.csv} -replace '"'
执行完此操作后,换行符又回到了备注字段。
很显然,我是PowerShell的新手。有人可以告诉我为什么会这样以及如何解决吗?
每个请求,这是我正在运行的更多代码: 〜
$Report = "" | Select-Object VMname,Host,ClusterName,Powerstate,MemoryGB,vCPUcount,IPaddresses,TotalVmdkSizeGB,DiskFree,DiskUsed,DatastoreName,NumCpuShares,NumMemShares,SnapshotCount,GuestOS,Notes
$Report.VMName = $VM.name
$Report.Host = $vm.VMHost.name
$Report.ClusterName = ($VM | Get-Cluster).Name
$Report.Powerstate = $vm.Powerstate
$Report.MemoryGB = $VM.MemoryMB/1KB
$Report.vCPUcount = $VM.NumCpu
$Report.IPaddresses = [string]::Join(',',$VM.Guest.IPAddress)
$Report.TotalVmdkSizeGB = $TotalHardDisksSizeGB
$Report.DiskFree = [Math]::Round((($vm.Guest.Disks | Measure-Object -Property FreeSpace -Sum).Sum / 1GB),2)
$Report.DiskUsed = $Report.TotalVmdkSizeGB - $Report.DiskFree
$Report.DatastoreName = [string]::Join(',',($VMview.Config.DatastoreUrl | %{$_.Name}))
$Report.NumCpuShares = $VMResourceConfiguration.NumCPUShares
$Report.NumMemShares = $VMResourceConfiguration.NumMemShares
$Report.SnapshotCount = (@($VM | Get-Snapshot)).Count
$Report.GuestOS = $VM.Guest.OSFullName
$Report.Notes = $VM | Select-Object -ExpandProperty Notes | Foreach-Object {$_ -Replace "`r", ", "}
$allLines += $Report
$allLines | Export-Csv $CSVOutputFile -Delimiter '*' -NoTypeInformation