import fitz # PyMuPDF from PIL import Image, ImageDraw, ImageFont import datetime # Setări generale input_pdf = "document2.pdf" output_pdf = "document_fara_print.pdf" watermark_text = "TEXT" font_size_ratio = 0.01 # proporție din lățimea paginii text_color = (255, 0, 0, 40) # roșu opac (maxim de protecție) # Deschidem PDF-ul pdf = fitz.open(input_pdf) images = [] for page_num in range(len(pdf)): # Convertim pagina în imagine (300 dpi) pix = pdf[page_num].get_pixmap(dpi=300) img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples).convert("RGBA") # Pregătim fontul font_size = int(img.width * font_size_ratio) try: font = ImageFont.truetype("arial.ttf", font_size) except: font = ImageFont.load_default() # Layer transparent pentru watermark watermark_layer = Image.new("RGBA", img.size, (0, 0, 0, 0)) draw_wm = ImageDraw.Draw(watermark_layer) # Dimensiune text bbox = draw_wm.textbbox((0, 0), watermark_text, font=font) text_width = bbox[2] - bbox[0] text_height = bbox[3] - bbox[1] # Pas între repetiții step_x = text_width + 200 step_y = text_height + 200 # Desen watermark repetat for y in range(-img.height, img.height * 2, step_y): for x in range(-img.width, img.width * 2, step_x): draw_wm.text((x, y), watermark_text, font=font, fill=text_color) # Rotim layer-ul rotated = watermark_layer.rotate(-45, expand=1) # Decupăm la dimensiunea originală x_center = rotated.width // 2 y_center = rotated.height // 2 half_w = img.width // 4 half_h = img.height // 4 cropped = rotated.crop((x_center - half_w, y_center - half_h, x_center + half_w, y_center + half_h)) # Asigurăm același mode și dimensiune cropped = cropped.convert("RGBA").resize(img.size) # Combinăm cu pagina originală watermarked = Image.alpha_composite(img, cropped) images.append(watermarked.convert("RGB")) # Salvăm PDF final cu metadate images[0].save(output_pdf, save_all=True, append_images=images[1:]) # Redeschidem pentru a adăuga metadatele doc = fitz.open(output_pdf) doc.set_metadata({ "title": "Raport oficial", "author": "Nume Prenume", "subject": "Document protejat", "keywords": "Protecție, watermark, confidențial", "creator": "Sistem intern de generare PDF", "producer": "Denumire", "creationDate": datetime.datetime.now().strftime("D:%Y%m%d%H%M%S"), "modDate": datetime.datetime.now().strftime("D:%Y%m%d%H%M%S") }) doc.saveIncr() doc.close() print(f"PDF creat cu watermark și metadate: {output_pdf}")
Cum să protejezi documentele PDF împotriva copierii și printării: tehnici de watermark și securizare
Cum să convertești rapid zeci de documente Word în PDF folosind PowerShell / Как быстро конвертировать десятки документов Word в PDF с помощью PowerShell
$sourceFolder = "E:\DocumenteWord" $destFolder = "E:\DocumentePDF" if (!(Test-Path $destFolder)) { New-Item -ItemType Directory -Path $destFolder | Out-Null } $wdFormatPDF = 17 $word = New-Object -ComObject Word.Application $word.Visible = $false $extensions = @("*.doc", "*.docx") foreach ($ext in $extensions) { foreach ($file in Get-ChildItem -Path $sourceFolder -Filter $ext) { try { $pdfPath = Join-Path $destFolder ($file.BaseName + ".pdf") Write-Host "Convertim: $($file.FullName) -> $pdfPath" $doc = $word.Documents.Open($file.FullName, $false, $true) # Conversie cu string .NET pur $doc.SaveAs([string]$pdfPath, [ref]$wdFormatPDF) $doc.Close($false) } catch { Write-Host "Eroare la fișierul: $($file.FullName) - $($_.Exception.Message)" -ForegroundColor Red } } } $word.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null Write-Host "Conversia a fost finalizată!"
Полезные команды PowerShell
Эти команды PowerShell помогут вам управлять файлами, директориями, службами и получать основную информацию о системе. Примеры подходят как для начинающих, так и для опытных пользователей.
$sourceFolder = "E:\DocumenteWord" $destFolder = "E:\DocumentePDF" if (!(Test-Path $destFolder)) { New-Item -ItemType Directory -Path $destFolder | Out-Null } $wdFormatPDF = 17 $word = New-Object -ComObject Word.Application $word.Visible = $false $extensions = @("*.doc", "*.docx") foreach ($ext in $extensions) { foreach ($file in Get-ChildItem -Path $sourceFolder -Filter $ext) { try { $pdfPath = Join-Path $destFolder ($file.BaseName + ".pdf") Write-Host "Convertim: $($file.FullName) -> $pdfPath" $doc = $word.Documents.Open($file.FullName, $false, $true) # Conversie cu string .NET pur $doc.SaveAs([string]$pdfPath, [ref]$wdFormatPDF) $doc.Close($false) } catch { Write-Host "Eroare la fișierul: $($file.FullName) - $($_.Exception.Message)" -ForegroundColor Red } } } $word.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null Write-Host "Conversia a fost finalizată!"
🔐 Блокировка установки и удаления программ в Windows 10
Ниже представлен PowerShell-скрипт, который позволяет ограничить установку и удаление программ на компьютере под управлением Windows 10. Скрипт следует запускать от имени администратора. Он вносит изменения в реестр, блокируя доступ к установщику MSI, Microsoft Store, панели управления и другим функциям.
# Сценарий для блокировки установки и удаления приложений в Windows 10 # Требуется запуск от имени администратора # 1. Блокировка Windows Installer (MSI) $RegistryPathInstaller = "HKLM:\Software\Policies\Microsoft\Windows\Installer" New-Item -Path $RegistryPathInstaller -Force | Out-Null Set-ItemProperty -Path $RegistryPathInstaller -Name "DisableMSI" -Value 1 # 1 - Отключить Windows Installer для стандартных пользователей # 2. Блокировка доступа к "Добавить или удалить программы" в Панели управления $RegistryPathUninstall = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Uninstall" New-Item -Path $RegistryPathUninstall -Force | Out-Null Set-ItemProperty -Path $RegistryPathUninstall -Name "NoAddRemovePrograms" -Value 1 # 1 - Скрыть "Добавить или удалить программы" # 3. Блокировка доступа к Microsoft Store $RegistryPathStore = "HKLM:\Software\Policies\Microsoft\WindowsStore" New-Item -Path $RegistryPathStore -Force | Out-Null Set-ItemProperty -Path $RegistryPathStore -Name "RemoveWindowsStore" -Value 1 # 1 - Отключить Microsoft Store # 4. Блокировка UAC (Контроль учетных записей пользователей), чтобы ограничить установку $RegistryPathUAC = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" Set-ItemProperty -Path $RegistryPathUAC -Name "EnableLUA" -Value 1 # 1 - Включить UAC # 5. Блокировка изменения приложений через приложение "Настройки" $RegistryPathSettings = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" New-Item -Path $RegistryPathSettings -Force | Out-Null Set-ItemProperty -Path $RegistryPathSettings -Name "NoControlPanel" -Value 1 # 1 - Скрыть Панель управления и Настройки Write-Output "Ограничения успешно применены. Обычные пользователи не могут устанавливать или удалять приложения.
🔐 Как изменить порт удалённого рабочего стола (RDP) с помощью PowerShell
Изменение стандартного порта RDP (3389) на произвольный — это распространённая мера безопасности среди системных администраторов. Ниже приведён PowerShell-скрипт, который автоматизирует процесс изменения порта, перезапуска службы RDP и настройки брандмауэра Windows.
# Укажите новый порт $nouPort = 61322 # Замените на желаемый порт # Изменение порта RDP в реестре Windows Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\' -Name 'PortNumber' -Value $nouPort # Проверка изменения $portSchimbat = Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\' -Name 'PortNumber' if ($portSchimbat.PortNumber -eq $nouPort) { Write-Output "Порт RDP успешно изменён на $nouPort." } else { Write-Output "Ошибка при изменении порта RDP." } # Перезапуск службы удалённого рабочего стола Restart-Service -Name TermService -Force Write-Output "Служба RDP перезапущена. Проверьте доступность нового порта." # Открытие нового порта в брандмауэре Windows New-NetFirewallRule -DisplayName "Allow RDP on Port $nouPort" -Direction Inbound -Protocol TCP -LocalPort $nouPort -Action Allow
Как настроить автоматический вход в Windows с помощью PowerShell: пошаговое руководство
В этом руководстве вы узнаете, как настроить автоматический вход в систему Windows с помощью PowerShell. Это может быть полезно для серверов, тестовых машин или других устройств, где требуется автоматический доступ без ввода пароля.
Шаг 1: Укажите имя пользователя и пароль
На этом этапе задаётся имя пользователя и пароль, которые будут использоваться для автоматического входа. Если пароль не требуется — оставьте его пустым.
$UserName = "Admin" $Password = "пароль_пользователя" # Можно оставить пустым, если пароль не используется
Шаг 2: Укажите путь в реестре
Этот путь используется для хранения параметров автоматического входа.
$regKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Шаг 3: Настройка параметров входа
Теперь задаются параметры: включение автологина, имя пользователя и пароль.
Set-ItemProperty -Path $regKey -Name "AutoAdminLogon" -Value "1" Set-ItemProperty -Path $regKey -Name "DefaultUserName" -Value $UserName Set-ItemProperty -Path $regKey -Name "DefaultPassword" -Value $Password
Шаг 4: Подтверждение
После выполнения настроек будет выведено сообщение об успешной настройке.
Write-Host "Автоматический вход для пользователя $UserName был успешно настроен."
Когда стоит использовать автологин?
- На серверах или терминалах без физического доступа.
- На тестовых или демонстрационных машинах.
- В закрытых системах, где безопасность не является приоритетом.
Важно: автоматический вход снижает уровень безопасности. Любой, кто имеет физический доступ к ПК, сможет войти в систему без пароля.
$UserName = "Admin" $Password = "пароль_пользователя" # Можно оставить пустым, если пароль не используется $regKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" Set-ItemProperty -Path $regKey -Name "AutoAdminLogon" -Value "1" Set-ItemProperty -Path $regKey -Name "DefaultUserName" -Value $UserName Set-ItemProperty -Path $regKey -Name "DefaultPassword" -Value $Password Write-Host "Автоматический вход для пользователя $UserName был успешно настроен."
Cum aflăm și modificăm portul RDP pe Windows – pas cu pas și avantaje
1. De ce să schimbăm portul RDP?
- Securitate sporită: Portul standard 3389 este cunoscut și scanat frecvent de atacatori. Ascunderea RDP în spatele unui port alternativ ajută la evitarea unor atacuri automate (de tip „bot”), crescând șansele de a trece neobservat la scanările generice.
- Reducerea conflictelor: În anumite organizații sau rețele, portul 3389 poate fi deja rezervat ori blocat. Schimbarea portului rezolvă posibile conflicte și face configurația mai flexibilă.
- Obicei bun de administrare: În general, mutarea serviciilor importante de pe porturile implicite este o practică uzuală pentru a avea un plus de protecție și pentru a organiza mai eficient politicile de firewall
Как скачать видео с facecast.net | How download video from facecast.net
În timpul conferinței noastre, apăsăm butonul F12 și observăm că videoclipul este încărcat în segmente de o secundă. Atunci când facem clic pe unul dintre fișierele .ts, suntem întrebați unde dorim să salvăm. Această funcționalitate ne-a inspirat ideea de a descărca fiecare fișier .ts și de a le uni ulterior într-un singur videoclip complet.