我们的sitecore系统拥有超过20万用户。我需要导出符合特定条件的用户列表。我正在使用powershell脚本,我使用get-user命令来检索用户。然后我循环浏览用户列表并选择符合我标准的用户;在我的情况下,那些年龄超过18岁的用户。然后我使用export-csv将结果写入csv文件。我发现这需要1.5个小时才能完成。
我的问题是,有没有办法让一个获取用户并指定我年龄超过18岁的标准?字段年龄存储在自定义属性中。还有,还有其他任何有效的方法(除了powershell)来完成我在这里要做的事情吗?
以下是原始代码:
function export($user)
{
$age = $user.profile.GetCustomProperty("age")
if{$age -gt 18)
{
$id = $user.profile.GetCustomProperty("id")
$firstname = $user.profile.GetCustomProperty("first name")
$user | select-object -property @{Name="First Name";Expression={$firstname}},
@{Name="Age";Expression={$age}},
@{Name="ID";Expression={$id}} |
Export-CSV -Path c:\temp\out.csv -Append -NoTypeInformation
}
}
$users = get-user -Filter *
if($users -ne $null)
{
$users | foreach {export($_)}
}
答案 0 :(得分:3)
<强>更新强>
根据你的例子我可以看出为什么需要这么长时间。您每次迭代都要导出为CSV。
试试这个:
$users = Get-User -Filter * | Where-Object { $_.Profile.GetCustomProperty("age") -gt 18 }
$property = @(
"Name",
@{Name="First Name";Expression={$PSItem.Profile.GetCustomProperty("first name")}},
@{Name="Age";Expression={$PSItem.Profile.GetCustomProperty("age")}},
@{Name="ID";Expression={$PSItem.Profile.GetCustomProperty("id")}}
)
$users | Select-Object -Property $property | Export-CSV -Path c:\temp\out.csv -Append -NoTypeInformation
旧评论:
我看得越多,我怀疑这可以做到。 age属性应序列化并存储在配置文件中。除非有更快的方式来提取个人资料日期,否则我不确定还能做些什么来加快速度。
我怀疑你做的是这样的事情:
Get-User -Filter * | Where-Object { $_.Profile.GetCustomProperty("Age") -gt 18 }
我不知道比这更快的方法。
答案 1 :(得分:2)
然后我循环浏览用户列表并选择那些用户 符合我的标准
你不应该这样做。而是直接使用Get-User
过滤用户Get-User -Filter * -ResultSize Unlimited | Where-Object {$_.age -ge 18}
作为另一个例子,我将过滤18岁以上且名字以“Ste”开头的用户。
Get-User -Filter * -ResultSize Unlimited | Where-Object {$_.age -ge 18 -and $_.FirstName -like "Ste*"}