Sitecore powershell get-user命令

时间:2016-01-24 22:41:44

标签: powershell sitecore sitecore7 sitecore8

我们的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($_)}
}

2 个答案:

答案 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*"}