我收到了这个Powershell脚本,用于查询24小时内未更改密码的用户。查询将输出重定向到csv文件。以下是Powershell脚本和批处理脚本:
Powershell脚本:
$root = [ADSI]''
$searcher = new-object System.DirectoryServices.DirectorySearcher($root)
$searcher.filter = "(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"
$searcher.sizelimit = 5000
[Void]$searcher.PropertiesToLoad.Add("cn")
[Void]$searcher.PropertiesToLoad.Add("samAccountName")
[Void]$searcher.PropertiesToLoad.Add("pwdLastSet")
$users = $searcher.findall()
$UserOU = "OU=Mountain,DC=Atlanta,DC=ga"
$PWDays = (Get-Date).AddDays(-1)
$UserCount = 0
$UserPW = 0
foreach($user in $users)
{
if ($user.path -like "*$UserOU")
{
$usercount = $UserCount
if ([datetime]::FromFileTime(($user.properties.pwdlastset)[0]) -le $PWDays)
{
$UserPW = $UserPW + 1
Write-Host $user.Properties.cn
}
}
}
批处理脚本:
powershell.exe d:\temp\query.ps1 > D:\temp\query.csv
我的问题是:如何更改脚本以将用户名的标头放在csv输出文件中?
标题可能很简单,“用户名”不一定是名字和姓氏。
答案 0 :(得分:3)
您没有使用Export-Csv
的原因?您可以将对象传输到其中,它将包含标题。
$users |
? { $_.Path -like "*$UserOU" } |
? { [datetime]::FromFileTime(($user.properties.pwdlastset)[0]) -le $PWDays } |
% { $_ | Add-Member -PassThru NoteProperty Username $_.Properties.cn } |
select Username |
Export-Csv D:\temp\query.csv
可能会奏效。 (提示:管道比循环更有趣:))
答案 1 :(得分:1)
不确定(永远不会有用户PS),但我认为坚持
Write-Host "Username"
在foreach之前,可能会做到这一点