我想执行 2 个函数,第一个函数 "ad" 用于执行用户的列表,然后需要使用 csv 格式在输出函数中更新适当的输出,在执行脚本时输出为空。
$out = "F:inactive.csv"
function ad () {
$users = Get-Content "C:dis1.txt"
foreach ($user in $users) {
try {
$memberof = Get-ADUser $user -Properties * -ErrorAction Stop | Select-Object samaccountname, memberof
foreach ($groups in $memberof) {
if ($group=$groups.memberof -like "*mobile*") {
foreach ($name in $group) {
$gpnames += "$((Get-ADGroup $name).samaccountname);"
$gpname= "$($memberof.samaccountname),Exist,$($gpnames)"
}
Write-Output $gpname
} else {
Write-Output "$($memberof.samaccountname),Exist"
}
}
} catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException] {
$usrname = "$($user),NotExist"
Write-Output $usrname
}
}
}
function output {
param($usrname,$memberof,$gpnames,$ad)
New-Object PSObject -Property @{
UserAccount = $memberof.samaccountname
NotExist = $usrname
GroupNames = $gpnames
}
$gpnames = $memberof = $usrname = $null
output | Select-Object useraccount, notexist, groupnames | Export-Csv $out
} return output
你的方法被误导了。让您的函数ad
返回对象列表,然后将这些对象通过管道传送到 Export-Csv
以创建 CSV 输出文件:
function ad {
Get-Content 'C:dis1.txt' | ForEach-Object {
$user = Get-ADUser -Filter "SamAccountName -eq '$_'" -Properties samaccountname, memberof
if ($user) {
$user | Select-Object SamAccountName,
@{n='UserExists';e={$true}},
@{n='Groups';e={
($_.MemberOf |
Where-Object { $_ -like "*mobile*" } |
Get-ADGroup |
Select-Object -Expand SamAccountName) -join ','
}}
} else {
New-Object -Type PSObject -Property {
SamAccountName = $_
UserExists = $false
Groups = $null
}
}
}
}
ad | Export-Csv 'C:pathtooutput.csv' -NoType
如果您绝对必须为输出使用单独的函数(无论出于何种未知原因),请将Export-Csv
包装在如下函数中:
function output($filename) {
$Input | Export-Csv $filename -NoType
}
并用管道连接两个函数:
ad | output 'C:pathtooutput.csv'