Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Out-File -InputObject ($var1 + "`t" + $var2) -FilePath C:\test.csv -Append
В связи с тем, что согласно нашего технического задания данные у нас очень хорошо структурированы мы можем к ним обращаться, используя стандартные запросы, одним из таких примеров может послужить справочник сотрудников, который используется на каждом предприятии.Пффф.
#############################
# by Sergey S. Kovalev
# 2016-08-16
#############################
cls
# Генерируем имя файла для отчета
$csvreport = "D:\Reporting\complete-ad-users\"+$LogDate+"_"+$domainname+".csv"
# Подключение модуля для работы с ActiveDirectory
Import-Module ActiveDirectory
# Получение списка всех доменов в лесу
$forestdomains = get-adforest
# Получаем актуальную дату
$LogDate = get-date -f yyyyMMdd
# Запускаем цикл выгрузки информации по каждому домену в лесу
foreach ($domainname in $forestdomains.domains) {
# Выводим имя домена
$domainname
# Проверяем существование файла,
$Temp = Test-Path $csvreport
If ($Temp -eq $True) {Remove-Item $csvreport} # Если существует - удаляем
$DomainDC = Get-ADDomainController -DomainName $domainname -Discover # Получаем имя первого контроллера в домене
$SearchBase = "DC="+$domainname.Split(".")[0]+",DC="+$domainname.Split(".")[1] # Определяем корень домена для поиска объектов
$Attribute = "msds-user-account-control-computed" # Определяем статус учетой записи
$ADServer = $DomainDC.ToString()+"."+$domainname.ToString() # Опеределяем FQDN имя первого контроллера домена
# Получаем список всех пользователей домена
$AllADUsers = Get-ADUser -server $ADServer `
-searchbase $SearchBase `
-Filter * -Properties * #| Where-Object {$_.info -NE 'Migrated' -and $_.Enabled -eq 'Enabled'} # Примеры фильтра поиска
# Выводим количество пользователей в домене
$AllADUsers.count
# Для всех пользователей в домене получаем значения объектов
$AllADUsers |
Select-Object @{Label = "Display Name";Expression = {$_.DisplayName}},
@{Label = "GivenName";Expression = {$_.GivenName}},
@{Label = "_FirstNameOnly";Expression = {($_.GivenName).split("")[0]}},
@{Label = "_MiddleNameOnly";Expression = {($_.GivenName).split("")[1]}},
@{Label = "Surname";Expression = {$_.Surname}},
@{Label = "initials";Expression = {$_.initials}},
@{Label = "sAMAccountName";Expression = {$_.sAMAccountName}},
@{Label = "Email";Expression = {$_.Mail}},
@{Label = "msExchVersion";Expression = {($_.msExchVersion) -replace "44220983382016","Exchange 2010"}},
@{Label = "Company";Expression = {$_.Company}},
@{Label = "Department";Expression = {$_.Department}},
@{Label = "Job Title";Expression = {$_.Title}},
@{Label = "Description";Expression = {$_.Description}},
@{Label = "telephoneNumber";Expression = {$_.telephoneNumber}},
@{Label = "Mobile";Expression = {(($_.mobile).toString())}},
@{Label = "ipPhone";Expression = {$_.ipPhone}},
@{Label = "otherTelephone1";Expression = {$_.otherTelephone[0]}},
@{Label = "otherTelephone2";Expression = {$_.otherTelephone[1]}},
@{Label = "userPrincipalName";Expression = {$_.userPrincipalName}},
@{Label = "_userDomain";Expression = {$_.userPrincipalName.replace($_.sAMAccountName+"@","")}},
@{Label = "distinguishedName";Expression = {$_.distinguishedName}},
@{Label = "_accountPath";Expression = {$_.distinguishedName.replace("CN="+($_.DisplayName)+",","")}},
@{Label = "logonCount";Expression = {$_.logonCount}},
@{Label = "employeeID";Expression = {$_.employeeID}},
@{Label = "Account Status";Expression = {if (($_.Enabled -eq 'TRUE') ) {'Enabled'} Else {'Disabled'}}}, # the 'if statement# replaces $_.Enabled
@{Label = "Account Expires";Expression = {([datetime]::FromFileTime($_.accountExpires).ToString("u")) -replace "1601-01-01 07:00:00Z",""}},
@{Label = "is-PasswordNeverExpires";Expression = {$_.passwordneverexpires}},
@{Label = "msDS-User-Account-Control-Computed";Expression = {($_.$Attribute) -replace "8388608","Password expired" -replace "0","Normal account"}},
@{Label = "whenCreated";Expression = {($_.whenCreated).ToString("u")}},
@{Label = "pwdLastSet";Expression = {[datetime]::FromFileTime($_.pwdLastSet).ToString("u")}},
@{Label = "badPasswordTime";Expression = {[datetime]::FromFileTime($_.badPasswordTime).ToString("u")}},
@{Label = "lastLogonTimestamp";Expression = {[datetime]::FromFileTime($_.lastLogonTimestamp).ToString("u")}},
@{Label = "lastLogon";Expression = {[datetime]::FromFileTime($_.lastLogon).ToString("u")}},
@{Label = "Last LogOn Date";Expression = {($_.lastlogondate).ToString("u")}} |
# Пишем полученные данные в CSV файл
Export-Csv -NoClobber -Encoding utf8 -NoTypeInformation -Path $csvreport -Delimiter ";"
}
$Users | Export-XLSX -Path C:\temp\Demo.xlsx
Окну редактора PowerShell теперь можно изменять размеры, сомнительное достижение, но теперь окно можно развернуть на весь экран;
Знаете ли вы, что Excel на ура открывает csv файлы как «родные»
Export-Csv -Delimiter ';' -Encoding utf8 -NoTypeInformation -Path $home\test.csv
Import-Csv -Delimiter ';' -Encoding Default -Path $home\test.csv
Новые возможности PowerShell в Windows Server 2016