Как получить samAccountName из CSV-файла, экспортированного из Teams через powershell - PullRequest
1 голос
/ 17 апреля 2020

Я экспортировал файл CSV из Microsoft Teams и получил необходимые данные после выполнения этой команды:

Import-Csv -Path "C:\TeamsUserActivity.csv" | 
Where-Object { $PSItem.DisplayName -notlike "*-*" } | 
Select-Object -Property DisplayName,'LastActivity (UTC Time)' | 
Sort-Object -Property 'LastActivity (UTC Time)' -Descending | 
Export-Csv -Path "C:\TeamsUsers.csv"

Это отображает следующее:

DisplayName        LastActivity (UTC Time)
-----------        -----------------------
Tom Smith          2020-04-16T01:00:47Z
Joe Bloggs         2020-04-16T01:00:47Z
Harry Briggs       2020-04-16T01:00:47Z
Jeff Kerry         2020-04-16T01:00:47Z
Jane Briggs        2020-04-15T23:17:29Z
Betty Smith        2020-04-06T02:56:51Z

Мне нужно удалить записи под «LastActivity (UT C время)», которые находятся ниже первой даты Все, что ниже: 2020-04-16 Затем выполните команду Get-ADUser в Active Directory, чтобы получить samAccountName для каждой записи и поместить ее в третий столбец.

DisplayName        LastActivity (UTC Time)       UserID
-----------        -----------------------       ------
Tom Smith          2020-04-16T01:00:47Z          tsmith
Joe Bloggs         2020-04-16T01:00:47Z          jbloggs
Harry Briggs       2020-04-16T01:00:47Z          hbloggs
Jeff Kerry         2020-04-16T01:00:47Z          jkerry

При тестировании целого набора методов в Get-ADUser из ActiveDirectory для возврата имени samaccount, он будет работать только для одной записи, когда я использую текст stati c

Get-ADUser -filter { DisplayName -eq 'Tom Smith' } | Select samAccountName

Нет, когда я импортирую файл csv и запускаю foreach l oop для каждой строки. Код, который я протестировал и который, я думаю, должен вернуть то, что мне нужно, приведен ниже:

$in_file = "C:\PS\SessionData\sessionTMSct.csv"
$out_file = "C:\PS\SessionData\sessionTMSctout.csv"

$out_data = @()

ForEach ($row in (Import-Csv $in_file)) {
    If ($row.DisplayName) {
        $out_data += Get-ADUser $row.DisplayName -Properties samAccountName
    }
} 

$out_data | 
Select DisplayName,'LastActivity (UTC Time)',SamAccountName | 
Export-Csv -Path $out_file -NoTypeInformation

Завершается следующей ошибкой, предварительно строка:

Get-ADUser : The term 'Get-ADUser' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:8 char:22
+         $out_data += Get-ADUser $row.DisplayName -Properties samAccou ...
+                      ~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Get-ADUser:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

1 Ответ

1 голос
/ 17 апреля 2020

Вы были почти там. Пользовательское поле - это то, что вам нужно:

Import-Csv -Path "C:\TeamsUserActivity.csv" | `
Where-Object { $PSItem.DisplayName -notlike "*-*" } | `
Select-Object -Property DisplayName,'LastActivity (UTC Time)',`
@{l="samAccountName";e={$DN = $_.DisplayName; `
(Get-ADUser -filter {DisplayName -eq $DN}).samAccountName}} | `
Export-CSV -path "C:\ExportedTeamsUserActivity.csv"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...