Category Archives: PowerShell

PowerShell

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/

PowerShell remoting

Wymagania dot.  zdalnego połączenia przez PS:

  1. Otwarte porty: WSMan: 5985. Jeżeli połączenie ma się odbywać przez SSL, otwarty również port 5986;
  2. Sieć nie publiczna: Prywatna lub Firmowa;
  3. Uruchomiona usługę WinRM, skonfigurować uruchamianie w auto starcie;
  4. Utworzony Listenera dla adresu IP lub nazwy komputera.

Uruchomienie PS Remoting na komputerach pracujących w domenie:

  1. Konfiguracja auto startu usługi:
    Computer Configurations / Windows Settings / Security Settings / System Services / Windows Remote Management (WS-Management),
  2. Konfiguracja Listenera:
    Computer Configurations / Administrative Templates / Windows Components / Windows Remote Managament (WinRM) / WinRM Service / Allow remote server management through WinRM
    Opcja skonfigurowana na Enable, w miejscu IPv4 filter gwiazdka (*)
  3. Konfiguracja zapory sieciowej:
    Computer Configurations / Windows Settings / Security Settings / Windows Defender Firewall with Advanced Security / Inbound Rules – Wybrać usługę Windows Remote Management (HTTP-In)

Zamiast klikologii można posłużyć się komendami Powershell. Na maszynie, do której mamy się łączyć należy otworzyć PS z podwyższonymi uprawnieniami i wydać następujące komendy:

$Interface_Index = Get-NetConnectionProfile | Select -ExpandProperty InterfaceIndex
Set-NetConnectionProfile -InterfaceIndex $Interface_Index -NetworkCategory Private
Enable-PSRemoting -Force
Restart-Service WinRM

Dodatkowo na komputerze z którego mamy się łączyć do innych maszyn należy uruchomić PS z podwyższonymi uprawnieniami i wydać następującą komendę:

Set-Item wsman:\localhost\client\trustedhosts *

Samo połączenie do zdalnego komputera odbywa się poprzez wydanie polecania:

Enter-PSSession -ComputerName 192.168.5.7 -Credential admin

Możliwe jest wykonanie skryptu lub komendy na wielu komputerach naraz poprzez polecenie:

Invoke-Command -ComputerName 192.168.5.7, 192.168.5.8 -ScriptBlock { Get-ChildItem C:\ } -credential admin_account_name

lub uruchomić skrypt PowerShell:

Invoke-Command -ComputerName 192.168.5.7, 192.168.5.8 -FilePath C:\skrypty\tajemniczy_skrypt.ps1

Źródła:
http://powershell.org/wp/2012/08/06/ebook-secrets-of-powershell-remoting/
http://blogs.technet.com/b/heyscriptingguy/archive/2013/11/29/remoting-week-non-domain-remoting.aspx

Windows Server 2012 R2 Core – konfiguracja NIC Teaming

powershell
Get-NetAdapter
Get-NetAdapter ethernet0 | fl *

fl od format list – wszystkie właściwości interfejsu.
Następnie należy wyłączyć na jednym interfejsie usługę DHCP Client i nadać mu statyczny adres IP.

Get-NetAdapter ethernet0 | Set-NetIPInterface -dhcp disabled
Get-NetAdapter ethernet0 | new-netipaddress -IPAddress 192.168.0.104 -DefaultGateway 192.168.0.1 -PrefixLenght 24
Set-DNSClientServerAddress -InternetAlias ethernet0 -ServerAddress 192.168.0.100

Po nadaniu adresu IP jednemu interfejsowi można rozpocząć konfiguracją funkcji NIC Teaming

new-netbfoteam -name "Nasz Team" -TeamMembers ethernet0,ethernet1 -TeamingMode switchindependent -LoadBalancingAlgorithm dynamic

Nazwa netbfoteam pochodzi od Net Balance and Fail Over Team.
Teraz wynik komendy Get-NetAdapter pokaże 3 interfejsy – 2 interfejsy sieciowe fizyczne, oraz interfejs „Nasz Team”, który możemy konfigurować jak fizyczny interfejs (adresacja IP itp.).

PowerShell – włączenie Windows PowerShell Web Access (PSWA) w Windows 2012 R2

 

Enable-PSRemoting -SkipNetworkProfileCheck
Install-WindowsFeature WindowsPowerShellWebAccess -IncludeAllSubFeature -IncludeManagementTools
Install-PswaWebApplication –WebSiteName "Default Web Site" –WebApplicationName "PSWA" –UseTestCertificate
Add-PswaAuthorizationRule -UserName server\Administrator -ComputerName server -ConfigurationName Microsoft.PowerShell
Add-PswaAuthorizationRule -UserName win2k8r2\Administrator -ComputerName win2k8r2 -ConfigurationName Microsoft.PowerShell