我一直在寻找有关如何使用-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,以及最佳实践是什么?
先谢谢大家
答案 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中格式化标题是否更容易?
以下一些链接可能会有所帮助:
答案 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