2016-01-24 17 views
1

我们的sitecore系统中有超过20万用户。我需要导出符合特定条件的用户列表。我正在使用PowerShell脚本,我正在使用get-user命令来检索用户。然后我循环浏览用户列表并选择符合我标准的列表;在我的情况下,那些年龄大于18的用户。然后我使用export-csv将结果写入一个csv文件。我发现这需要花费1.5个小时才能完成。Sitecore powershell get-user命令

我的问题是,有没有一种方法可以做一个获得用户并指定我的年龄大于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

您能否提供一个示例脚本来显示您现在要做什么来查询用户和过滤器? – Coding101

+0

感谢您的代码。我用一个适合你的例子更新了我的回答。这些键对于自定义属性是区分大小写的。 – Coding101

回答

2

更新:

根据你的例子,我可以看到,为什么需要这么长。您每次迭代都会导出为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 

旧评论:

我看着它,我怀疑,这是可以做的更多。年龄属性应该序列化并存储在配置文件中。除非有更快的方法来提取个人档案日期,否则我不知道还有什么可以加快速度。

我怀疑你正在做的事情是这样的:

Get-User -Filter * | Where-Object { $_.Profile.GetCustomProperty("Age") -gt 18 } 

我不知道比这更快的方法。

+0

我已将我的原始代码添加到问题中。我按照你的建议修改了我的代码,它的运行速度绝对快。现在用原始代码花费近30分钟,超过1.5小时。我可以让Get-User命令只返回我感兴趣的字段吗?那应该会提高性能更没有? – degmo

+0

感谢您的接受。现在需要多长时间运行? – Coding101

+0

现在需要运行20-25分钟;显着的改善。谢谢您的帮助。 – degmo

2

我再通过用户列表循环和挑选那些 符合我的标准

你不应该这样做。作为另一个例子,我将筛选超过18岁,名字以“Ste”开头的用户。用户可以直接使用Get-User筛选用户。

Get-User -Filter * -ResultSize Unlimited | Where-Object {$_.age -ge 18 -and $_.FirstName -like "Ste*"} 
+0

我在你的例子中看到了一些问题。 1)ResultSize不是该命令可用的属性。 2)年龄是一个自定义属性,应该从配置文件访问。 – Coding101

+0

你确定吗?查看示例1 - https://technet.microsoft.com/zh-cn/library/aa996896(v=exchg.160).aspx – sqone2

+1

@ sqone2这不是问题中的Get-User cmdlet - [* this是*](https://sitecorepowershell.gitbooks.io/sitecore-powershell-extensions/content/appendix/commands/Get-User.html) –