Category Archives: Microsoft

Informacje nt. produktów rodziny Microsoft

PowerShell – skanowanie folderu w poszukiwaniu pliku o danej nazwie oraz powiadomienie na e-mail

Zadaniem poniższego skryptu PS jest przeszukiwanie zasobu sieciowego w poszukiwaniu pliku mającego w nazwie datę wczorajszą, oraz wysłania wiadomości e-mail w przypadku jego znalezienia.

$emailFrom = 'powiadomienia@domena.pl' 
$secstring = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000060a18ed3a9312c4c939f8408d224ed9f00000000020000000000106600000001000020000000e0d0d688c598b0dc944b81409d0f7ab8dea52d0612f7d5e56b84c09d0d13eb07000000000e800000000200002000000036d3059ac438090bdbb1a0b4b2bb2fa7a5ffab65d96fa02a1aeab9667b54bb5f20000000a1f6442ff2bb3d90f1fd93b06d9178eec8239eb71fe330ff3c8fe5167b9120d1400000002dca53a7f97ac0d52ea085d15fa3dd501aec6e7eb72e5c23577ec53ef7f40c498573d0d7f58d57ca54521b0a4ffc77618d33178363f897ec08a72305078af168'
$credential = New-Object System.Management.Automation.PSCredential($emailFrom, ($secstring | ConvertTo-SecureString))
$patch = '\\192.168.5.2\pliki\'
$date = Get-Date -Format "yyyy_MM_dd"
$day_minus_one = (Get-Date).AddDays(-1) | Get-Date -Format "yyyy_MM_dd"
$time = get-Date -Format "HH_mm"
$emailTo = "odbiorca1@domena.pl" , "odbiorca2@domena.pl"

$files = Get-ChildItem -path $patch\*$day_minus_one.pdf
"Wykonanie skryptu dnia $date o godzinie $time" >> $patch\script_activity.txt

if ($files) { 
$files | Export-CSV $patch\revoke_privileges_$date.txt 
$body = $files | Out-String
Send-MailMessage -To $emailTo -From $emailFrom -encoding utf8 -Subject 'Odbior uprawnien uzytkownikowi' -Body "Ponizej wykazane sa nazwy plikow - skanow wnioskow o nadanie uprawnien czasowych do pracy w systemie, ktore trzeba wycofac. $body Aby skrypt spelnial swoje zadanie data odebrania uprawnienia powinna znajdowac sie na koncu nazwy pliku PDF w formacie rrrr_MM_dd, tj. np KowalskiJanek_2023_05_05_W_KB_2023_05_10.pdf." <# -Attachments $patch\revoke_privileges_$date.txt #> -Credential $credential -SmtpServer 'server.smtp.com.pl' -Port 587
}

else { 
exit 
}

SecureString (zaszyfrowane hasło – w tym przypadku do konta e-mail) można uzyskać konwertując hasło za pomocą komendy:

"haslo_czystym_tekstem" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File "d:\Password.txt"

Skrypt PS można skonwertować do pliku *.exe np. przy pomocy programu Win-PS2EXE-GUI.

Źródło:

https://stackoverflow.com/questions/14319272/powershell-scan-folder-for-certain-file-name-and-write-to-a-log-file-and-email
https://www.itprotoday.com/powershell/how-encrypt-powershell-scripts
https://powershellguru.com/instant-guide-to-convert-ps1-to-exe/

Aktualizacja głównego kontrolera domeny – przenoszenie ról FSMO

  1. Stworzenie snapa kontrolera z którego przerzucamy role;
  2. Dodanie siebie (admina) do grupy: Administratorzy przedsiębiorstwa. Po dodaniu do grupy przelogować się. Dodanie do grup jest niezbędne do przerzucenia ról unikalnych dla lasu, tj: schemamaster, domainnamingmaster
  3. Przerzucenie ról na inny kontroler:
    Move-ADDirectoryServerOperationMasterRole -Identity sw-dc02 -OperationMasterRole pdcemulator, ridmaster, infrastructuremaster, schemamaster, domainnamingmaster
  4. Po przeniesieniu ról sprawdzić czy role zostały przeniesione
    Get-ADForest domena.local | Format-Table SchemaMaster, DomainNamingMaster
    
    Get-ADDomain domena.local | format-table PDCEmulator, RIDMaster, InfrastructureMaster
  5. Aktualizacja kontrolera z którego przenieśliśmy role.
  6. Zweryfikowanie poprawności działania serwera i poprawności replikacji z innymi kontrolerami domeny.
  7. Przerzucenie ról z powrotem.
  8. Zweryfikowanie poprawności replikacji z innymi kontrolerami domeny oraz działania samego serwera po zainstalowaniu nowych łatek.
  9. Skasowanie snapa z VMware.

Active directory – włączenie kosza

enable-adoptionalfeature ‚recycle bin feature’ -scope forestconfigurationset -target nazwa.domeny’

get-adobject -filter {displayname -eq ‚skasowane konto’} -includedeletedobjects
get-adobject -filter {displayname -eq ‚skasowane konto’} -includedeletedobjects | restore-adobject

UWAGA: kosz raz włączony nie może zostać wyłączony. Potrzebuje czasu zanim się rozpropaguje.

Sprawdzanie poprawnej replikacji między kontrolerami domeny

Pierwszy sposób – poprzez GUI: Active Directory Sites and Services
Drugi sposób – za pomocą komendy repadmin:
repadmin /?
repadmin /showrepl
repadmin /showrepl DC2
repadmin /showconn
repadmin /showconn DC2
repadmin /showobjmeta DC2 „cn=”
repadmin /kcc
repadmin /replsum

repadmin /replicate DC1 DC2 dc=company,dc=pri /destinstion, source, context
repadmin /syncall DC1 dc=company,dc=pri //synchronizacja wszystkich kontrolerów
repadmin /syncall DC1 dc=company,dc=pri /e /d

GET-ADReplicationFailure DC1