gpt4 book ai didi

powershell - 结合powershell输出

转载 作者:行者123 更新时间:2023-12-03 12:56:55 24 4
gpt4 key购买 nike

我正在尝试将两个函数的输出与默认 Get-ADUser-cmdlet 的输出结合起来。我对创建帐户的时间感兴趣,它是否被锁定以及它的名称是什么。我还想知道用户上次登录的时间(使用多个 DC)以及该帐户是否被用作共享邮箱。

我编写了两个自定义函数Get-ADUserLastLogonisSharedMailbox,这两个函数都使用Write-Output 函数来输出它们的输出。如果是 Get-ADUserLastLogon,这将是 LaSTLogon: time,如果是 isSharedMailbox,这将是 shared: yes/no。我还在 foreach 循环中使用标准 Get-ADUser 调用

现在,Get-ADUser 的默认输出是:

SAMAccountName LockedOut Created
-------------- --------- -------
ACC False 23-10-2015 8:20:20

自定义函数的输出如下:

Lastlogon : 1-1-1601 1:00:00

Shared: yes

我想要将 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。希望有人能回答我的问题。

最佳答案

您可以在 Select-Object 中使用计算属性。看看example 4用于 MSDN 页面。

在你的情况下,这将是:

Get-ADUser $usernameWithoutTld[1] -Properties LockedOut, SamAccountName, Created -ErrorAction Stop | `
Select-Object SAMAccountName, LockedOut, Created, @{Name='LastLogon';Expression={Get-ADUserLastLogon -UserName $usernameWithoutTld[1]}}, @{Name='IsSharedMailbox';Expression={isSharedMailbox -mailboxname $usernameWithoutTld[1]}}

或者更好的是,您可以使用 Get-ADUser 放入管道中的对象依次调用该特定对象的函数,并且在您的查询返回时很有用多个结果:

Get-ADUser $usernameWithoutTld[1] -Properties LockedOut, SamAccountName, Created -ErrorAction Stop | `
Select-Object SAMAccountName, LockedOut, Created, @{Name='LastLogon';Expression={Get-ADUserLastLogon -UserName $_.sAMAccountName}}, @{Name='IsSharedMailbox';Expression={isSharedMailbox -mailboxname $_.sAMAccountName}}

关于powershell - 结合powershell输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44541830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com