Я думаю, что вы делаете это немного сложнее, чем должно быть, т.е. я не уверен, зачем вам часть кода в аномальном блоке скриптов?Попробуйте вместо этого:
. ./psscript_Get-FreeSpaceFrag.ps1
Get-Content 'C:\PowershellScripts\ebi_serverlist.txt' |
Foreach {Write-Host "Getting Disk Info for Server $_" -foregroundcolor "Green" `
Get-FreeSpaceFrag $_} |
Export-Csv "C:\PowershellScripts\DiskInfo.csv" -NoTypeInformation
Не уверен, что это решит проблему, но вы также можете упростить эту часть вашей функции:
$volumes | Where {$_.capacity -gt 0} | Foreach { $_ | Add-Member NoteProperty Frag `
($_.defraganalysis().defraganalysis.totalPercentFragmentation) -PassThru} |
Select @{N="Server";E={$_.Systemname}}, DriveLetter,Label,Capacity,FreeSpace,
@{N="PercFree";E={"{0,9:N0}" -f (($_.FreeSpace/1gb)/($_.Capacity/1gb)*100)}},
Frag, @{N="InfoDate";E={$dt}
Кстати, вместо того, чтобы вызывать скрипт-блок, подобный этому $fr.invoke()
канонический способ в PowerShell - использовать оператор вызова следующим образом: &$fr
.