【发布时间】:2017-06-14 10:15:08
【问题描述】:
我正在尝试将两个函数的输出与默认Get-ADUser-cmdlet 的输出相结合。我对创建帐户的时间感兴趣,它是否被锁定以及它的名称是什么。我还想知道用户上次登录的时间(使用多个 DC)以及该帐户是否被用作共享邮箱。
我编写了两个自定义函数Get-ADUserLastLogon 和isSharedMailbox,这两个函数都使用Write-Output 函数来输出它们的输出。如果是Get-ADUserLastLogon,这将是Lastlogon:时间,如果是isSharedMailbox,这将是共享:yes/no。我还在 foreach 循环中使用标准的 Get-ADUser 调用
现在,Get-ADUser 的默认输出是:
SAMAccountName LockedOut 创建
-------------- --------- --------
ACC 错误 23-10-2015 8:20:20
自定义函数的输出如下:
最后登录:1-1-1601 1:00:00
共享:是的
我想要将 LastLogon 和 Shared 'headers' 组合到 Get-ADUser 中。所以输出会变成:
SAMAccountName LockedOut Created LastLogon Shared
当前代码的代码,其中帐户从 Excel 工作表中导入:
foreach($username in $usernameWithTld){
if ($username -eq $NULL){
break
}
$usernameWithoutTld = $username.split('\')
Get-ADUser $usernameWithoutTld[1] -Properties LockedOut, SamAccountName,
Created -ErrorAction Stop | Select-Object SAMAccountName, LockedOut,
Created
Get-ADUserLastLogon -UserName $usernameWithoutTld[1]
# Shared mailbox?
isSharedMailbox -mailboxname $usernameWithoutTld[1]
}
功能代码:
function isSharedMailbox([string]$mailboxname){
$isObject = Get-ADUser -Filter {name -eq $mailboxname} -SearchBase "..." | Select-Object DistinguishedName,Name
if ($isObject -match "DistinguishedName"){
$output = "Shared: no"
Write-Output $output
} else {
$output = "Shared: No"
Write-Output $output
}
}
function Get-ADUserLastLogon([string]$userName){
$dcs = Get-ADDomainController -Filter {Name -like "*"}
$time = 0
foreach($dc in $dcs)
{
$hostname = $dc.HostName
$user = Get-ADUser $userName | Get-ADObject -Properties lastLogon
if($user.LastLogon -gt $time)
{
$time = $user.LastLogon
}
}
$dt = [DateTime]::FromFileTime($time)
Write-Output "LastLogon : $dt"
}
我确信可以进行很多改进,我仍在学习如何编写(正确的)PowerShell。希望有人能回答我的问题。
【问题讨论】:
-
isSharedMailbox将始终返回No,可能需要解决此问题 ;)
标签: powershell active-directory