Как мне ввести SamAccountName из get-aduser? - PullRequest
0 голосов
/ 19 февраля 2019

Я карабкался в поисках примеров использования -inputobject, и я не могу найти ни одного.Я никогда раньше не касался PowerShell, но когда я недавно начал эту работу, и мне сказали, что это сценарий, который мы использовали, я не мог не начать возиться с ним!Трубы завораживают, но я не могу обойти эту последнюю проблему.

У меня есть огромный список данных, который появляется при поиске пользователей в AD, и мне было интересно, смогу ли я такжепоймать SamAccountName из того же блока кода!

$User = Get-ADUser -Filter "EmployeeID -eq '$NameID' -or SamAccountName -eq '$NameID' -or DisplayName -eq '$NameID' -or UserPrincipalName -eq '$NameID'" -Properties 
Enabled,LockedOut,Mail,Created,passwordlastset,Description,PasswordExpired,LastLogonDate,EmployeeID,DisplayName,"msRTCSIP-UserEnabled",
"msDS-UserPasswordExpiryTimeComputed","extensionAttribute7",telephonenumber,targetaddress,distinguishedName |
                Select-Object @{Expression={$_.Name};Label='User Name';},
                @{Expression={$_.UserPrincipalName};Label='Logon Name';},
                @{Expression={$_.DisplayName};Label='Display Name';},
                @{Expression={$_.Created};Label='Date Created';},
                @{Expression={$_.SamAccountName};Label='SamAccountName';} -InputObject $Name,
                Description,
                Enabled, 
                @{Expression={$_.LockedOut};Label='Locked';}, 
                @{Expression={$_.Mail}; Label='Email Address';}, 
                @{Expression={$_.passwordlastset};Label='PW Last Reset';},
                @{Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")};Label='Password Expiry';},
                @{Expression={$_.LastLogonDate};Label='Last Logon';}, 
                @{Expression={$_.PasswordExpired};Label='Password Expired';}, 
                @{Expression={$_.extensionAttribute7};Label='Contract Expires On';},
                @{Expression={$_.EmployeeID};Label='Employee ID';},
                @{Expression={$_."msRTCSIP-UserEnabled"};Label='Skype Enabled';},
                @{Expression={$_.telephonenumber};Label='Phone Number';},
                @{Expression={$_.targetaddress};Label='Email Forwarded To';},
                @{Expression={$_.distinguishedName};Label='Distinguished Name';} | Select-Object SamAccountName -InputObject $Name | Format-list | Out-String

Выше я использую это, чтобы получить большую часть интересной информации, чтобы красиво отобразить ее в сценарии, но в дальнейшем я должен вызвать ее снова с моимограниченные знания для простого ввода пользовательского SamAccountName в переменную $ Name (чтобы собрать их менеджеров и т. п.) Это выглядит примерно так:

$Name = (getad-user -Filter "EmployeeID -eq '$NameID' -or SamAccountName -eq '$NameID' -or DisplayName -eq '$NameID' -or UserPrincipalName -eq '$NameID'").SamAccountName

Мне просто интересно, смогу ли я сжать все это водин Get-ADUser, и какая лучшая практика это будет!

Заранее спасибо всем

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

У вас есть довольно запутанный способ получить то, что вы хотите.Чтобы минимизировать количество вызовов Get-ADUser, просто используйте переменную.Вы уже присваиваете переменную в начале, но по какой-то причине вы «мусорите» объект.

В вашем коде Select-Object SamAccountName -InputObject $Name, похоже, не имеет смысла.Вы никогда не показываете, что назначаете на $Name, и с тем, что вы делаете перед этим, это выглядит странно.Как таковой, я удалил его в коде ниже.

$user = Get-ADUser -Filter "EmployeeID -eq '$NameID' -or SamAccountName -eq '$NameID' -or DisplayName -eq '$NameID' -or UserPrincipalName -eq '$NameID'" -Properties 
Enabled,LockedOut,Mail,Created,passwordlastset,Description,PasswordExpired,LastLogonDate,EmployeeID,DisplayName,"msRTCSIP-UserEnabled",
"msDS-UserPasswordExpiryTimeComputed","extensionAttribute7",telephonenumber,targetaddress,distinguishedName

$niceDisplay = $user |
                Select-Object @{Expression={$_.Name};Label='User Name';},
                @{Expression={$_.UserPrincipalName};Label='Logon Name';},
                @{Expression={$_.DisplayName};Label='Display Name';},
                @{Expression={$_.Created};Label='Date Created';},
                @{Expression={$_.SamAccountName};Label='SamAccountName';} -InputObject $Name,
                Description,
                Enabled, 
                @{Expression={$_.LockedOut};Label='Locked';}, 
                @{Expression={$_.Mail}; Label='Email Address';}, 
                @{Expression={$_.passwordlastset};Label='PW Last Reset';},
                @{Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")};Label='Password Expiry';},
                @{Expression={$_.LastLogonDate};Label='Last Logon';}, 
                @{Expression={$_.PasswordExpired};Label='Password Expired';}, 
                @{Expression={$_.extensionAttribute7};Label='Contract Expires On';},
                @{Expression={$_.EmployeeID};Label='Employee ID';},
                @{Expression={$_."msRTCSIP-UserEnabled"};Label='Skype Enabled';},
                @{Expression={$_.telephonenumber};Label='Phone Number';},
                @{Expression={$_.targetaddress};Label='Email Forwarded To';},
                @{Expression={$_.distinguishedName};Label='Distinguished Name';} | Format-list | Out-String

$name = $User.SamAccountName
0 голосов
/ 19 февраля 2019

Лучше всего превратить любой фрагмент кода в функцию с возможностью повторного использования, а затем объединить несколько функций в модули.Поскольку вы начинаете с powershell, вы можете начать с простой функции, подобной этой:

Function Get-ADUserInfo {
   param([string]$NameID)

   Get-ADUser -Filter "SamAccountName -eq '$NameID'" -Properties Enabled,LockedOut,Mail,Created,passwordlastset,Description,PasswordExpired,LastLogonDate,EmployeeID,DisplayName,Manager,"msRTCSIP-UserEnabled","msDS-UserPasswordExpiryTimeComputed","extensionAttribute7",telephonenumber,targetaddress,distinguishedName |
                Select-Object @{Expression={$_.Name};Label='User Name'},
                SamAccountName

    }

# call the function with different nameid values like so
$Name = Get-ADUserInfo -NameID someuser1
$Name = Get-ADUserInfo -NameID someuser2

Информация о менеджерах

Get-ADuser -Identity $Name.Manager

Inputobject, как следует из названия, используется для передачи объекта в качестве вводак функции.Свойство samaccountname уже присутствует в выходных данных, поэтому нет необходимости делать что-либо еще, кроме как просто указать его, как показано в приведенном выше коде.

и зачем отображать «Имя» как «пользователя»название"?не проще ли отформатировать заголовки в excel?

Вот несколько ссылок, которые могут быть полезны:

функции

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions?view=powershell-5.1

...