如何从get-aduser输入SamAccountName?

时间:2019-02-19 04:26:39

标签: powershell pipe select-object

我一直在寻找有关如何使用-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 var(To收集他们的经理等。)看起来像这样:

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

我只是想知道是否可以将其全部压缩为一个Get-ADUser,以及最佳实践是什么?

先谢谢大家

2 个答案:

答案 0 :(得分:0)

最佳实践是将任何代码片段转换为可恢复功能,然后将多个功能组合为模块。由于您从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

答案 1 :(得分:0)

您有一种非常复杂的方法来获得想要的东西。要减少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