首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell -创建拥有CRM许可证且超过30天未登录的用户的CSV

Powershell -创建拥有CRM许可证且超过30天未登录的用户的CSV
EN

Stack Overflow用户
提问于 2016-10-28 23:10:53
回答 1查看 104关注 0票数 0

我正在尝试合并来自两个命令小程序的输出。我需要列出所有具有特定许可证SKUID (CRMPLAN)的用户,他们已经超过30天没有登录。

沿着这些路线的一些东西甚至接近吗?

代码语言:javascript
复制
$UserList = get-MSOLUser -All | where {$_.isLicensed -eq "TRUE" -and $_.Licenses.AccountSKUID -eq "Domain:CRMPLAN"}

$MasterList = @()
foreach ($DisplayName in $UserList) {
$MyObject = New-Object PSObject -Property @{
LastLogonTime = (Search-ADAccount -AccountInactive -TimeSpan 30.00:00:00 | where {$_.ObjectClass -eq 'user'} | FT Name,ObjectClass –A}).LastLogonTime
}  
$MasterList += $MyObject
}
$MasterList | select displayname,IsLicenced,LastLogonTime - export-CSV C:\LastLogonDate.csv
EN

回答 1

Stack Overflow用户

发布于 2016-10-29 01:36:49

好的,现在您基本上获得了$userList中的用户列表,然后获得了每个用户在过去30天内未登录的所有上次登录时间的列表,并将其添加到一个数组中,然后尝试对不存在的数据进行一些选择,因为您只选择了最后登录时间,而这在AD中实际上并不存在。相反,您需要做的是遍历它们,检查它们的最后登录日期,看看它们是否在过去30天内登录过,如果没有,则将它们的信息添加到数组中(您也可以通过收集两个数组,然后使用group-object进行处理来完成此操作,但这要复杂得多)。您还必须记住,如果您选择的属性不是您在管道中使用的对象的一部分,则需要在选择中使用表达式将其填充到对象中

所以你的foreach循环看起来就像这样。

代码语言:javascript
复制
$masterList = @()

foreach($user in $userList){
    $oldDate = (get-date).AddDays(-30)
    $userObj = Get-ADUser -Identity $user.UserPrincipalName -Properties lastlogondate | Select-Object displayname,LastLogonDate,@{Name="IsLicensed"; Expression={$user.isLicensed}}

    if($userObj.lastLogonDate -le $oldDate){
        $masterList += $userObj
    }
}

最后,确保在导出时使用管道而不是减法符号。因此最后一行应该类似于$masterlist | export-csv c:\tmp\lastlogondate.csv

请注意,这里不需要执行select操作,因为我们已经执行了select操作来获取循环中所需的数据,还要尽量避免将文件放在C:\的根目录下,任何启用了UAC的计算机在尝试执行此操作时都会抛出权限错误,除非您是以管理员身份运行的,而这对于此脚本来说并不是必需的。希望这对你有所帮助,如果你有任何问题请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40308065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档