Get-ChildItem -R -Path "D:\fileFolder\" | ? { $_.Name -like '*(1).mp4' } | Remove-Item
Category Archives: PowerShell
Powershell – masowa zmiana nazw plików
Get-ChildItem -Path e:\pliki\*.txt -File | ForEach-Object { $currentFile = $_.Name $newName = $_.Name -replace "stary_fragment_nazwy", "nowy_fragment_nazwy" Rename-Item -path $_ -NewName $newName Write-Host "Renamed file $currentFile to $newName" }
lub inaczej:
get-childitem *txt | foreach {
rename-item $_ $_.name.replace("stary_fragment_nazwy","nowy_fragment_nazwy")
}
Więcej nt. zmiany nazw plików: https://lazyadmin.nl/powershell/rename-files/
Powershell – Wyświetlenie plików oraz folderów których ścieżka dostępu przekracza x znaków
Get-ChildItem -path e:\ -Recurse -Force -ErrorAction SilentlyContinue | Where-Object {$_.FullName.Length -gt 250}
Wyświetlenie liczby plików / folderów których ścieżka dostępu przekracza 250 znaków:
write-host(Get-ChildItem -path e:\ -Recurse -Force -ErrorAction SilentlyContinue | Where-Object {$_.FullName.Length -gt 250}).count
Po przełączniku -Recourse można użyć przełącznika -File lub -Directory.
Powershell – monitorowanie temperatury CPU
function Get-Temperature { $t = Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi" $returntemp = @() foreach ($temp in $t.CurrentTemperature) { $currentTempCelsius = ($temp / 10) - 273.15 $returntemp += $currentTempCelsius.ToString() } return $returntemp } Get-Temperature
Active Directory i PowerShell – operacje na grupach
Wyświetlenie obiektów należących do grupy o nazwie GroupName
Get-ADGroupMember GroupName | Format-Table name
Wyświetlenie wszystkich grup, do których należy użytkownik o nazwie UserName
Get-ADPrincipalGroupMembership UserName | Format-Table name
Wyświetlenie użytkowników należących do grupy zabezpieczeń o nazwie SecureGroup.
Get-ADUser -filter 'memberOf -recursivematch "CN=SecureGroup, OU=IT, DC=domena, DC=local"' | Format-Table name
Dodanie użytkowników OU do grupy zabezpieczeń.
Get-ADUser -SearchBase ‘OU=nazwaOU,DC=test,DC=local’ -Filter * | ForEach-Object {Add-ADGroupMember -Identity ‘NazwaGrupyZabezpieczen’ -Members $_ }
Active Directory i PowerShell – zmiana domyślnych OU przy tworzeniu kont użytkowników i komputerów
Do zmiany domyślnego OU, w którym zakładane są nowe konta komputerów i użytkowników służy komenda PS rediusr:
redirusr "OU=NowyOU,DC=firma,DC=local" redircmp "OU=NowyOU,DC=firma,DC=local"
Active Directory i PowerShell – tworzenie kopii zapasowej
#zdefiniowanie źródła Get-WBVolume -AllVolumes $vol = Get-WBVolume -VolumePath c: #zdefiniowanie miejsca docelowego $networkBackupLocation = New-WBBackupTarget -NetworkPath \\DC2\backups #Włączenie polisy - ustawienie atrybutu SystemState na True Add-WBSystemState -Policy backupPolicy #zdefiniowanie i konfiguracja polisy $backupPolicy = New-WBPolicy Add-WBVolume -Policy -$backupPolicy -Volume $vol Add-WBBackupTarget -Policy $backupPolicy -Target $networkBackupLocation #uruchomienie polisy Start-WBBackup -Policy $backupPolicy
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
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/
Odinstalowanie oprogramowania za pośrednictwem PowerShell. Uninstall software using Powershell.
$MyApp = gwmi win32_product | ? {$_.name -match ‘Acrobat’}
$MyApp.Uninstall()