powershell

Как выгрузить в csv список отправленных писем. Кто отправил и кому за 7 дней. Exchange

Get-TransportServer | get-messagetrackinglog -EventID “send” -Start (Get-Date).AddDays(-7) -ResultSize Unlimited | Select timestamp, eventid, Source,Messageid, MessageSubject, sender,@{Name=’recipients‘;Expression={[string]::join(“;”, ($_.recipients))}}, clientip, clienthostname, serverip, serverhostname, messageinfo | export-csv C:\message_log.csv

С заменой system.string

Хорошая ссылка https://www.millersystems.com/powershell-exporting-multi-valued-attributes-via-export-csv-cmdlet/

Как массово создать учётные записи в АД из csv файла

Import-Module ActiveDirectory
Import-Csv -Path C:\user\1.csv -Encoding Default -Delimiter ";" |
foreach-object{
  Write-Host "Username" $_.CN "not exists " $_.SamAccountName.Length
   if ($_.SamAccountName.Length  -gt 20 ) {  $_.SamAccountName=$_.SamAccountName.Substring(0,20)
 Write-Host $_.SamAccountName}
 $Firstname=''
 $FirstName=$_.FirstName
 $filter="SamAccountName -eq '"+$_.SamAccountName+"'"
 $usrexist=get-aduser -filter $filter


  if ($usrexist -eq $null)
  {

  new-aduser -Name $_.CN.trim() -DisplayName $_.DisplayName.trim() -City $_.City -Department $_.Department -Surname $_.Surname -GivenName $_.Givename  -SamAccountName $_.SamAccountName   -Title $_.title -POBox $_.postOfficeBox -AccountPassword (ConvertTo-SecureString '123456Q!' -AsPlainText -force) -Path "OU=Temp,DC=voxys,DC=ru" -UserPrincipalName $_.emailaddress -Enabled $true -ChangePasswordAtLogon $true
  }
  else
  {
  
  Write-Host "Username" $_.CN "exists" -ForegroundColor Red
  
  }}

Читать далее

Как создать контакты exchange почты из домена организации с помощью powershell.

add-pssnapin quest.activeroles.admanagement
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
#Адрес контроллера домена, к которому подключаемся";
$Domain = 'namedomen.ru'
Connect-QADService -Service $Domain
#Получаем список пользователей удаленного домена   
$userlist = (Get-QADUser -name [А-Я]* -IncludedProperties DisplayName, title, company, department, mailNickname, Office, l, firstname, sn, PhoneNumber, Mobile, Email, physicalDeliveryOfficeName, AccountIsDisabled, msExchMailboxGuid -SizeLimit 0)
ForEach ($user in $userlist)
 {
 #Пользователь заблокирован?
 if ($user.AccountIsDisabled -eq $true) 
   {
  #У пользователя есть почта?
  if ($user.msExchMailboxGuid -notlike $NULL)   {
   #Пользователь заблокирован, удаляем существующий контакт
   Remove-MailContact $user.mail –Confirm:$false
   }
  }
 elseif ($(Get-contact $user.displayname))
  {
  if ($user.mail -notlike $NULL)
   {
   #Пользователь не заблокирован, контакт существует, надо обновить
   Set-Contact $user.email -Company "Имя компании" -Title $user.Title -Department $user.Department 
Читать далее

Как создать учётные записи с помощью powershell в AD из csv

Import-Csv -Path C:\1.csv -Encoding Default -Delimiter ";" | sort CN |
foreach-object{
#New-ADUser -Name $_.Full_Name -AccountPassword (ConvertTo-SecureString 'password!' -AsPlainText -force) -CannotChangePassword $True -Description $_.Desc -DisplayName $_.Full_Name -EmailAddress $_.Email -Enabled $False -GivenName $_.First_Name -HomeDirectory $_.Homedir -HomeDrive $Homedri -PasswordNeverExpires $True -Path $_.Path -SamAccountName $_.Email -ScriptPath LogonS.cmd -Surname $_.Last_Name -UserPrincipalName $_.Email -passthru
#Write-Host $_.SamAccountName
$filter="SamAccountName -eq '"+$_.SamAccountName+"'"
$usrexist=get-aduser -filter $filter
#Write-Host $_.SamAccountName
#Write-Host $_.SamAccountName
if ($usrexist -eq $null)
{
Write-Host "Username" $_.CN "not exists " $_.SamAccountName.Length
if ($_.SamAccountName.Length -gt 20 ) { $_.SamAccountName=$_.SamAccountName.Substring(0,20)
Write-Host $_.SamAccountName}
if (!$_.emailaddress){ $_.emailaddress=$_.SamAccountName+'@domen.ru'}
# write-host -Name $_.CN -DisplayName $_.DisplayName -City $_.City -Department $_.Department -Surname $_.Surname -GivenName $_.Givenname -SamAccountName 
Читать далее

Как завершить сессию на всех серверах в локальной сети.

Проблема при смене пароля на серверах остались отключенные сессии . Из-за этого блокируется учётная запись. Надо сессию завершить на всех серверах . но так как серверов больше 500 в ручную делать это негуманно к себе.

вот скрипт . Запускается от пользователя которого надо завершить

param (
        #get current logged on username
        [string]$UserName = $env:USERNAME
    )

    # Импортировать модуль 
Читать далее

Как вывести список пользователей которые состоят в группе.

Задача вывести пользователей из определенной группы , но. Группа имеет в себе пользователей из разных лесов домена.

И по этому команда  Get-ADGroupMember «1c Base ZUP(Zup_TE)» не работает . пишет ошибка :

Get-ADGroupMember : Произошла неопределенная ошибка
строка:1 знак:1
+ Get-ADGroupMember "1c Base ZUP(Zup_TE)"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (1c Base ZUP(Zup_TE):ADGroup) [Get-ADGroupMember], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember



Читать далее

Как сбросить терминальные сессии на терминальной ферме RDS windows 2012-2016 без прав администратора

Задача дать поддержке права для сброса сессии с фермы терминалов RDS.

Сначала надо создать группу и поместить туда всех людей кто будет сбрасывать сессии и подключаться.

Назавём её Terminal Servers Administrators

Теперь делаем скрипт и добавляем в него наши хосты фермы и группу которую сделали

$Group = "domen\Terminal Servers Administrators"
$Servers = @(
   "Host-RDSH1", 
"Host-RDSH2",
"Host-RDSH3",
"Host-RDSH4",
"Host-RDSH5"
Читать далее

Как сбросить завсшию службу или когда она в состоянии стоп(stoped)

Проверим какие службы имеют статус stoped.

Get-WmiObject -Class win32_service | Where-Object {$_.state -eq 'stop pending'}

Теперь выполним скрипт. Он выяснит какой процесс блокирует и убьёт его. После этого служба остановится.

$Services = Get-WmiObject -Class win32_service -Filter "state = 'stop pending'"
if ($Services) {
foreach ($service in $Services) {
try {
Stop-Process -Id $service.processid -Force -PassThru -ErrorAction Stop
}
Читать далее

Как установить get-cluster powershell.

Ошибка

The term ‘Get-Cluster’ 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.
+ CategoryInfo : ObjectNotFound: (Get-Cluster:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Установить

 Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
 Import-Module FailoverClusters
Читать далее