Category Archives: PowerShell

PowerShell

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/

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
    Opcja skonfigurowana na Enable, w miejscu IPv4 filter gwiazdka (*)
  3. Konfiguracja zapory sieciowej:
    Computer Configurations / Windows Settings / Security Settings / Windows Firewall with Advanced Security / Inbound Rules

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

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