Редактировать: я перепутал LastLogon и LastLogonTimestamp.LastLogonDate основан на LastLogonTimestamp.Различия между этими свойствами объясняются здесь и здесь .Я вернусь и обновлю свой ответ.
Вы используете Write-Host
для вывода данных:
Write-Host $username $dt
Это не сработает.Write-Host
означает «запись на экран консоли, а не на стандартный вывод».Это будет прекрасно работать, если вы пытаетесь отобразить данные, но вызов $x = Get-ADUserLastLogon -UserName $login
выведет результаты на экран консоли, а переменной $x
ничего не будет присвоено.Например:
PS C:\> $x = Write-Host 0
0
PS C:\> $x
PS C:\>
Посмотрите, как Write-Host все еще пишет в консоль, а $x
не имеет значения?
Ваша функция должна выглядеть примерно так: $username, $dt
или Write-Output $username, $dt
или return $username, $dt
.
Хотя на самом деле это не сработает так, как вы хотите.Я бы, вероятно, использовал пользовательский объект (см. Get-Help about_Object_Creation -ShowWindow
), например:
Import-Module ActiveDirectory
function Get-ADUserLastLogon([string]$userName) {
$user = Get-ADUser $userName -Properties LastLogonDate
[PSCustomObject]@{'Logins' = $username; 'LastLogonDate' = $user.LastLogonDate}
}
$users = import-csv -Encoding UTF8 -path C:\scripts\loginy.csv
$results = foreach ($user in $users) {
Get-ADUserLastLogon -UserName $user.logins
}
$results | Export-CSV C:\scripts\Eksporty\logowania.csv -Append -encoding "utf8"
Честно говоря, если бы я делал то, что вы пытаетесь сделать здесь, мой настоящий код выглядел бы так:
Import-Csv -Encoding -Path C:\scripts\loginy.csv |
Select-Object -ExpandProperty logins |
Get-ADUser -Properties LastLogonDate |
Select-Object @{n = 'Logins'; e = {$_.SamAccountName}}, LastLogonDate |
Export-Csv -Path C:\scripts\Eksporty\logowania.csv -Encoding UTF8 -NoTypeInformation
Select-Object -ExpandProperty logins
передаст только голое значение столбца логинов.Get-ADUser принимает идентификационные данные из конвейера и извлекает LastLogonDate для каждого пользователя, если только SamAccountName (свойство по умолчанию) является именем входа.
В следующей строке Select-Object @{n = 'Logins'; e = {$_.SamAccountName}}, LastLogonDate
используется вычисленнаясвойство (см. примеры в Get-Help Select-Object -ShowWindow
) для переименования свойства SamAccountName в столбце с именем Logins.Вы можете использовать Select-Object SamAccountName, LastLogonDate
, если вам не важно имя столбца.А параметр -NoTypeInformation
в Export-Csv
просто не позволяет добавить эту раздражающую бессмыслицу "#TYPE System.Management.Automation.PSCustomObject" в первой строке.