2016-01-24 47 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) –