none
PowerShell (.net v2) - как найти число элементов для GetEnumerator()? RRS feed

  • Вопрос

  • $pc = $profileManager.GetEnumerator() 
    if ($pc) {	
       'Update user Profiles:'+$pc.count	
       Foreach ($Profile in $pc)	
       {	    
       #some act	
       }
    }

    Это рабочий фрагмент кода.

    Как определить число элементов в $pc ?

    В примере $pc.count не работает.


    MishalL



    • Изменено mishal80 19 декабря 2019 г. 11:19
    19 декабря 2019 г. 11:17

Ответы

  • итого, у вас 1 элемент типа UserProfile в переменной $pc. Если будет 2 и более $pc.count будет работать. Если вы хотите увидеть 1 или 0 то вам стоит элементы пересчитать или конвертировать в массив.

    ($pc | measure-object).count

    или

    @($pc).count
    Мне первый вариант нравится больше как более очевидный

    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа mishal80 20 декабря 2019 г. 4:07
    19 декабря 2019 г. 12:09
    Модератор

Все ответы

  • $pc.count будет работать если $pc это array, или если такое свойсво со здать у psobject принудительно. Если же в массив попадает 1 элемент то тип по умолчанию становиться типом того самого одного элемента (string/int/psobject/...)

    покажите вывод $pc.gettype() и $pc | fl *


    The opinion expressed by me is not an official position of Microsoft

    19 декабря 2019 г. 11:54
    Модератор
  • вывод $pc.gettype()

    IsPublic IsSerial Name                                     BaseType                                                                                                                                                                 
    -------- -------- ----                                     --------                                                                                                                                                                 
    True     False    UserProfile                              Microsoft.Office.Server.UserProfiles.ProfileBase

    вывод $pc | fl *



    MultiloginAccounts        : {AD1\login1}
    ProfileManagerBase        : Microsoft.Office.Server.UserProfiles.UserProfileManager
    ProfileManager            : Microsoft.Office.Server.UserProfiles.UserProfileManager
    PersonalSite              : 
    QuickLinks                : Microsoft.Office.Server.UserProfiles.QuickLinkManager
    PersonalizationLinks      : Microsoft.Office.Server.UserProfiles.PersonalizationLinkManager
    Colleagues                : Microsoft.Office.Server.UserProfiles.ColleagueManager
    Memberships               : Microsoft.Office.Server.UserProfiles.MembershipManager
    Suggestions               : Microsoft.Office.Server.UserProfiles.SuggestionManager
    DisplayName               : Учетная запись login1
    ProfileType               : User
    Parent                    : 
    PersonalUrl               : http://server1/my/Person.aspx?accountname=AD1\login1
    RemotePersonalSiteHostUrl : 
    PublicUrl                 : http://server1/my/Person.aspx?accountname=AD1\login1
    RecordId                  : 4
    ID                        : 3ed6a4a4-bf70-4e10-9c9c-bafbdcd04f14
    PublicOrganizationViewUrl : http://server1/my/OrganizationView.aspx?ProfileType=User&accountname=AD1\login1
    Properties                : {UserProfile_GUID, SID, ADGuid, AccountName...}
    ProfileSubtype            : Microsoft.Office.Server.UserProfiles.ProfileSubtype
    CurrentChangeToken        : 1;129;12/19/2019 10:42:34
    ViewerRights              : 31


    MishalL

    19 декабря 2019 г. 12:01
  • итого, у вас 1 элемент типа UserProfile в переменной $pc. Если будет 2 и более $pc.count будет работать. Если вы хотите увидеть 1 или 0 то вам стоит элементы пересчитать или конвертировать в массив.

    ($pc | measure-object).count

    или

    @($pc).count
    Мне первый вариант нравится больше как более очевидный

    The opinion expressed by me is not an official position of Microsoft

    • Помечено в качестве ответа mishal80 20 декабря 2019 г. 4:07
    19 декабря 2019 г. 12:09
    Модератор