トップ回答者
コンピュータのリストを取得する数が1000に限られる

質問
-
PowerShellを触って2ヶ月足らずのOpsと申します。宜しくお願いします。
以下のサイトを参考にして、作成したスクリプトについて質問させていただきます。
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/nov06/hey1109.mspx
#Windows PowerShell を使用してすべてのコンピュータのリストを取得する方法はありますか
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.Filter = ("(objectCategory=$strCategory)")
$colProplist = "name"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()の実行後、
$colResults.Countを表示させると、1000となり、1000以上のコンピュータリストを
取得できないのですが、方法がありましたら、教えて頂きたく投稿しました。
参考資料)
Windows Server World
PowerShell in Action
回答
-
一度に取得できるオブジェクトの最大数が、既定で1000 になっているようです。(追記:最大数はドメインコントローラの設定によって既定値が異なる場合があります。)
http://msdn2.microsoft.com/ja-jp/library/system.directoryservices.directorysearcher(VS.80).aspx
1000 を超える数のオブジェクトを取得するには、PageSize を指定してみてください。
$objSearch.PageSize = 100
などとしてから、$objSearch.FindAll() を実行すると、全オブジェクトが取得されていると思います。
すべての返信
-
一度に取得できるオブジェクトの最大数が、既定で1000 になっているようです。(追記:最大数はドメインコントローラの設定によって既定値が異なる場合があります。)
http://msdn2.microsoft.com/ja-jp/library/system.directoryservices.directorysearcher(VS.80).aspx
1000 を超える数のオブジェクトを取得するには、PageSize を指定してみてください。
$objSearch.PageSize = 100
などとしてから、$objSearch.FindAll() を実行すると、全オブジェクトが取得されていると思います。
-
PageSize を指定するだけでいいのか。。。
楽になりましたね。
WSH で ADO + ADSI LDAP Provider 使って実装したときは ranging query 使う必要があって非常に面倒でしたが。
Searching Using Range Retrieval