Skrypt tworzy obraz płyty CD/DVD włożonej do napędu, następnie kompresuje go z hasłem i wysyła na serwer FTP.
W tym konkretnym przypadku skrypt został przygotowany dla lekarza, który ma za zadanie włożyć płytę z badaniem pacjenta do napędu a następnie uruchomić skrypt, który następnie przed wysłaniem badania na serwer zapyta go o dane pacjenta i hasło do kompresji.
Poniżej instrukcja oraz sam skrypt:
1) Przekopiować pliki i foldery: winscp, oscdimg.exe, 7zip do katalogu c:\Windows\
2) Sprawdzić literę napędu CD/DVD, jeżeli inna niż „E” należy poprawić w skrypcie;
3) Badania będą zapisywane na pulpicie (%USERPROFILE%\desktop\badania).
Continue reading
Category Archives: Microsoft
Active Directory i Powershell – operacje na użytkownikach i komputerach
Artykuł w budowie.
Odblokowanie wszystkich zablokowanych kont:
Search-ADAccount -LockOut | Unlock-ADAccount
Znalezienie użytkownika:
Get-ADUser -Filter 'Name -like "*userName"'
Reset hasła użytkownikowi userName:
Set-ADAccountPassword userName -NewPassword (Read-Host - AsSecureString 'New Password') -Reset
Automatyczny reset hasła wielu użytkownikom:
Add-Type -AssemblyName 'System.Web' $userAccounts = 'user1', 'user2' foreach ($account in $userAccounts) { $plain_text_password = [System.Web.Security.Membership]::GeneratePassword(13, 3) Write-Host "Resetting $account password to $plain_text_password ..." Set-ADAccountPassword $account -NewPassword ($plain_text_password | convertto-securestring -asplaintext -force) }
Dodanie komputera do domeny
add-computer –domainname sieciunia.local -Credential sieciunia.local\administrator -restart –force
Wyświetlenie użytkowników nieaktualnych, którzy zmieniali hasło dalej niż 31 dni temu i wyłączenie / przeniesienie / usunięcie ich:
$password_Age = (Get-Date).adddays(-31) $users_with_old_password = Get-ADUser -Filter * -Properties PasswordLastSet | Where-Object { $_.PasswordLastSet -and $_.PasswordLastSet -lt $password_Age } $users_with_old_password #Wylaczenie kont w ktorych haslo nie bylo zmieniane $users_with_old_password | Set-ADUser -Enabled $false #Wlaczenie konta administratora jesli wczesniej zostalo omylkowo wylaczone $adminAccount = Get-ADUser -Filter * -Properties Name | ? { $_.Name -like 'admin*' } $adminAccount | Set-ADUser -Enabled $true #Znalezienie wszystkich wylaczonych kont $disabledUsersAccounts = Search-ADAccount -AccountDisabled -UsersOnly #przeniesienie uzytkownikow do nowego OU o nazwie zablokowani użytkonicy $disabledUsersAccounts | Move-ADObject -TargetPath "OU=Disabled Users,DC=sieciunia, DC=local" #usowanie kont za potwierdzeniem (nie mozna usowac kont wbudowanych) $disabledUsersAccounts | Remove-ADUser -Confirm:$false
Windows – eksport kluczy sieci WiFi
Aby wyeksportować klucze do wszystkich sieci WiFi należy uruchomić CMD jako administrator i wpisać polecenie:
netsh wlan export profile key=clear folder="d:\pass"
Klucze będą eksportowane do plików .xml do uprzednio stworzonego katalogu d:\pass.
PowerShell – wyszukiwanie pliku o danej nazwie i w przypadku jego znalezienia wysłanie powiadomienia na e-mail.
Zadaniem poniższego skryptu PS jest przeszukiwanie zasobu sieciowego w poszukiwaniu plików mających w nazwie datę wczorajszą, oraz wysłania ich nazw w wiadomości e-mail w przypadku ich 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"
SecureString może odkodować wyłącznie ten użytkownik Windows, który je zakodował, dlatego też najbezpieczniej jest utworzyć dedykowane konto Windows, które będzie używane wyłącznie do uruchamiania skryptu.
Skrypt PS można również skonwertować do pliku *.exe np. przy pomocy programu Win-PS2EXE-GUI. Jednak nawet z pliku exe można wyciągnąć SecureStinga.
Ź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
- Stworzenie snapa kontrolera z którego przerzucamy role;
- Dodanie siebie (admina) do grupy: Administratorzy przedsiębiorstwa. Po dodaniu do grupy przelogować się. Dodanie do grup jest niezbędne do przeniesienia ról unikalnych dla lasu, tj: schemamaster, domainnamingmaster
- Przerzucenie ról na inny kontroler:
Move-ADDirectoryServerOperationMasterRole -Identity sw-dc02 -OperationMasterRole pdcemulator, ridmaster, infrastructuremaster, schemamaster, domainnamingmaster
- 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
- Aktualizacja kontrolera z którego przenieśliśmy role.
- Zweryfikowanie poprawności działania serwera i poprawności replikacji z innymi kontrolerami domeny.
- Przerzucenie ról z powrotem.
- Zweryfikowanie poprawności replikacji z innymi kontrolerami domeny oraz działania samego serwera po zainstalowaniu nowych łatek.
- 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ą linii komend – narzędzi Repadmin.exe, Dcdiag.exe oraz PowerShell.
Poniżej przykłady użycia polecenia repadmin oraz PS:
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
Get-ADReplicationConnection
Get-ADReplicationPartnerMetadata
W przypadku problemów z replikacją można sprawdzić w serwerze DNS czy figuruje Alias (CNAME) wszystkich kontrolerów domeny, czyli: <GUID>._msdcs.nazwadomeny.local . Jest to rekord typu CNAME, po którym komunikują się ze sobą kontrolery domeny. Rejestrują się one w serwerze DNS przy starcie usługi netlogon (komenda cmd: net stop netlogon && net start netlogon).
NSSM – Non-Sucking Service Manager – watchdog – monitorowanie serwisów w systemie Windows
NSSM ( https://nssm.cc/ ) jest bardzo przydatnym programem monitorującym działanie usług w systemie Windows.
CPU Limiter – ograniczenie zużycia CPU przez proces w systemie Windows.
Świetnym programem do ograniczenia zużycia CPU przez proces w systemie Windows jest program CPU Limiter autorstwa Martina Kudlicka, który można pobrać GitHuba: https://github.com/martin-kudlicka/cpu-limiter
GPO – loopback processing mode. Skonfigurowanie implementacji polis tak, aby konfiguracja komputera zastępowała konfigurację użytkownika.
Computer Configuration \ Administrative Templates \ System \ Group Policy \ Configuring user Group Policy loopback processing mode.