Сортировать свойства объекта Powershell
Все, что я использую этот код, чтобы получить данные из списка SharePoint и экспортировать их в текстовый файл, как вы видите, я использую New-Object PSObject, чтобы получить это
У меня вопрос, как я могу отсортировать свойства по названию, которое я дал или как экспортировать эти элементы, отсортированные по этому имени Заранее спасибо
$MyWeb = Get-SPWeb "http://ilike-eg.suz.itcgr.net/SM"
$MyList = $MyWeb.Lists["SCGC"]
$exportlist = @()
$Mylist.Items | foreach {
$obj = New-Object PSObject -property @{
"A"=" "+$_["AACCOUNT_ID"]
"B"=" "+$_["BTRANSACTION_ID"]
"C"=" "+$_["CDATE"]
"D"=" "+$_["DCUSTOMER_ID"]
"E"=" "+$_["ECUSTOMER_NAME"]
"F"=" "+$_["FAMOUNT"]
"G"=$_["GCLASS"]
}
$exportlist += $obj | Sort-Object -descending
$DateStamp = get-date -uformat "%Y-%m-%d@%H-%M-%S"
$NameOnly = "CDP"
$exportlist | Export-Csv -Delimiter "`t"-path "$NameOnly.txt"
}
$a, ${d:CDP.txt} = Get-Content .\CDP.txt
$a, ${d:CDP.txt} = Get-Content .\CDP.txt
(Get-Content D:\CDP.txt) |
Foreach-Object {$_ -replace $([char]34), ""} |
Set-Content D:\CDP.txt
(Get-Content D:\CDP.txt) |
Foreach-Object {$_ -replace "/", "-"} |
Set-Content D:\CDP.txt
(Get-Content D:\CDP.txt) |
Foreach-Object {$_ -replace "`t", ""} |
Set-Content D:\CDP.txt
1 ответ
Решение
Если вы знаете имена свойств, используйте следующее:
$exportlist |
Select-Object A,B,C,D,E,F,G |
Export-Csv -Delimiter "`t"-path "$NameOnly.txt"
Если вы не знаете названия свойств, попробуйте:
$properties = $exportlist |
Foreach-Object { $_.psobject.Properties | Select-Object -ExpandProperty Name } |
Sort-Object -Unique
$exportlist |
Select-Object $properties |
Export-Csv -Delimiter "`t"-path "$NameOnly.txt"
Я сделал несколько других изменений в вашем скрипте, чтобы сделать его более эффективным и легким для чтения:
$MyWeb = Get-SPWeb "http://ilike-eg.suz.itcgr.net/SM"
$MyList = $MyWeb.Lists["SCGC"]
$exportlist = @()
$Mylist.Items | ForEach-Object {
$obj = New-Object PSObject -property @{
"A"=" "+$_["AACCOUNT_ID"]
"B"=" "+$_["BTRANSACTION_ID"]
"C"=" "+$_["CDATE"]
"D"=" "+$_["DCUSTOMER_ID"]
"E"=" "+$_["ECUSTOMER_NAME"]
"F"=" "+$_["FAMOUNT"]
"G"=$_["GCLASS"]
}
#Remove unnecessary sort
$exportlist += $obj
$DateStamp = get-date -uformat "%Y-%m-%d@%H-%M-%S"
$NameOnly = "CDP"
#Exporting with sorted properties
$exportlist |
Select-Object A,B,C,D,E,F,G |
Export-Csv -Delimiter "`t"-path "$NameOnly.txt"
}
#Removed duplicate get-content line
$a, ${d:CDP.txt} = Get-Content .\CDP.txt
#Combined replace statements to avoid multiple read/writes
(Get-Content D:\CDP.txt) |
Foreach-Object {$_ -replace $([char]34) -replace "`t" -replace '/', ''} |
Set-Content D:\CDP.txt