如何从 get-aduser 输入 SamAccountName?
How do I input the SamAccountName from 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 var (召集他们的经理之类的。)看起来像这样:
$Name = (getad-user -Filter "EmployeeID -eq '$NameID' -or SamAccountName -eq '$NameID' -or DisplayName -eq '$NameID' -or UserPrincipalName -eq '$NameID'").SamAccountName
我只是想知道是否可以将其全部压缩到一个 Get-ADUser 中,最佳做法是什么!
在此先感谢大家
最好的做法是将任何一段代码变成一个可重用的函数,然后将多个函数组合成模块。因为你是从 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 用于将 object 作为输入传递给函数。 属性 samaccountname
已经出现在输出中,因此除了如上面的代码所示指定它之外,无需执行任何其他操作。
还有为什么选择将“姓名”显示为“用户名”?在 excel 中格式化 headers 不是更容易吗?
以下是一些可能有用的链接:
函数
你有一种非常复杂的方式来获得你想要的东西。要最小化 Get-ADUser
调用的数量,只需使用一个变量。您已经在开始时分配了一个变量,但无论出于何种原因,您 "trash" 对象。
在您的代码中 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
我一直在四处寻找如何使用 -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 (召集他们的经理之类的。)看起来像这样:
$Name = (getad-user -Filter "EmployeeID -eq '$NameID' -or SamAccountName -eq '$NameID' -or DisplayName -eq '$NameID' -or UserPrincipalName -eq '$NameID'").SamAccountName
我只是想知道是否可以将其全部压缩到一个 Get-ADUser 中,最佳做法是什么!
在此先感谢大家
最好的做法是将任何一段代码变成一个可重用的函数,然后将多个函数组合成模块。因为你是从 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 用于将 object 作为输入传递给函数。 属性 samaccountname
已经出现在输出中,因此除了如上面的代码所示指定它之外,无需执行任何其他操作。
还有为什么选择将“姓名”显示为“用户名”?在 excel 中格式化 headers 不是更容易吗?
以下是一些可能有用的链接:
函数
你有一种非常复杂的方式来获得你想要的东西。要最小化 Get-ADUser
调用的数量,只需使用一个变量。您已经在开始时分配了一个变量,但无论出于何种原因,您 "trash" 对象。
在您的代码中 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