Как мне ввести SamAccountName из get-aduser?
Я карабкался вокруг в поисках примеров использования -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 ответа
У вас есть довольно запутанный способ получить то, что вы хотите. Чтобы минимизировать количество 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
Лучше всего превратить любой фрагмент кода в функцию с возможностью повторного использования, а затем объединить несколько функций в модули. Поскольку вы начинаете с 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?
Вот несколько ссылок, которые могут быть полезны: