Background
This should include addresses which are written in safe format, with dots in brackets, like:
- 192.168.0[.]1
 - 192.168.0(.)1
 
Solution
How it works
- Input,
 - Working,
 - Output
 
W przypadku obiektów posiadających wiele właściwości przydaje się możliwość ich przeszukiwania wg fragmentu ich nazwy. Na przykład obiekt ma setki właściwości, ale chcemy wyświetlić wyłącznie te, które zawierają określone słowo.
| Nazwy właściwości wyświetlane są po lewej (na zielono), a ich wartości po prawej stronie | 
Może to nie jest zbyt szczęśliwy wybór, ale przypuśćmy, że z komendy Get-Date chcemy wyświetlić wszystkie właściwości, które zawierają w swojej nazwie ciąg day.
for ($i=1; $i -le 10; $i++){(Get-Random -Minimum 1 -Maximum 255).ToString() + '.' + (Get-Random -Minimum 1 -Maximum 255).ToString() + '.' + (Get-Random -Minimum 1 -Maximum 255).ToString() + '.' + (Get-Random -Minimum 1 -Maximum 255).ToString()}
![]()  | 
| Wynik działania komendy generującej adresy IP | 
$howMuchShouldBeGenerated = 10 #ile adresów ma zostać wygenerowanych
$IPs = @()
for ($i=1; $i -le $howMuchShouldBeGenerated; $i++){
    $IP = ""
    for ($j=1; $j -le 4; $j++){
        $oktet = (Get-Random -Minimum 1 -Maximum 255).ToString()
        $IP += $oktet
            if ($j -le 3){
                $IP += "."
            }
    }
    $IPs += $IP
}
$IPs
W celu rozwiązywania problemu z jakąś usługą, może się przydać prosty monitoring polegający na sprawdzaniu jej statusu w podanym interwale czasowym.
Poniższy jednolinijkowiec wykonuje takie właśnie zadanie.
  $serviceName = 'nazwa_usługi'; while ($TRUE) {start-sleep -Seconds 5; write-output "$(get-date -format "HH:mm:ss") : $((get-service -name $serviceName).Name) : $((get-service -name $serviceName).Status)"}
  
W powyższym kodzie proszę zwrócić uwagę na miejsca oznaczone na czerwono. Oczywiście 'nazwa_uslugi' to nic innego jak nazwa usługi, którą chcemy monitorować (nazwy usług można podejrzeć np. poleceniem Get-Service).
Z kolei cyfra 5 oznacza interwał czasowy w sekundach pomiędzy sprawdzeniami.
Rezultat jego działania widać poniżej.
  $serviceName = 'spooler'; while ($TRUE) {start-sleep -Seconds 5; write-output "$(get-date -format "HH:mm:ss") : $((get-service -name $serviceName).Name) : $((get-service -name $serviceName).Status)" | Tee-Object -file plik.txt -append}
  
Poniżej wklejam prostą komendę w PowerShellu, która pozwoli przeszukać wszystkie pliki tekstowe w folderze pod kątem podanego ciągu znaków.
Przydatne zwłaszcza kiedy w gąszczu logów trzeba znaleźć określoną frazę.
  Get-ChildItem -File | ForEach-Object {Select-String -Path $_.FullName -Pattern 'daniel'}
  Get-ChildItem *.txt -File | ForEach-Object {Select-String -Path $_.FullName -Pattern 'daniel'}
  
  
  
  Get-ChildItem *.txt -Recurse -File | ForEach-Object {Select-String -Path $_.FullName -Pattern 'daniel'}
  
  
Do przeszukania poszły dwa pliki. Pierwszy ze słowami angielskimi, drugi z polskimi:
![]()  | 
| Wynik działania opisywanej komendy w PowerShellu | 
No i to w sumie tyle. Jedna linijka, a potrafi zaoszczędzić dużo czasu :)
Przykładowa sytuacja.
Na Pulpicie macie dużo folderów w których jest dużo plików. Zapiszecie coś w którymś z tych podfolderów. Nie pamiętacie nazwy, ani folderu w którym plik został umieszczony.
Wtedy nerwowość szukania zapisanego dokumentu staje odwrotnie proporcjonalnie do pozostałego czasu, czyli im mniej czasu, tym większe zdenerwowanie ;)
W takich sytuacjach może się przydać poniższy "jednolinijkowiec".
Get-ChildItem -Recurse -File | Select-Object -Property FullName, LastWriteTime | Sort-Object LastWriteTime -Descending | Select-Object -First 30
Jeżeli więc chcecie wyświetlić 30 ostatnio zapisanych / zmodyfikowanych plików na Pulpicie i jego podfolderach należy odpalić PowerShella, przejść na Pulpit i wkleić powyższy kod.
Oczywiście zamiast przechodzenia do folderu i uruchamiania kodu, ścieżkę do przeszukania można podać poprzez parametr -Path dla polecenia Get-ChildItem. Również do tego polecenia można dodać parametr -Hidden, który spowoduje wyświetlanie także ukrytych plików.
Kod uzupełniony o te dwa parametry będzie miał zatem postać:
Get-ChildItem -Path "ścieżka_do_przeszukania" -Recurse -File -Hidden| Select-Object -Property FullName, LastWriteTime | Sort-Object LastWriteTime -Descending | Select-Object -First 30
Całkiem przydatna rzecz, zwłaszcza jeśli do przeanalizowania są dziesiątki folderów z tysiącami plików.
Jak włączyć Pulpit Zdalny na maszynie do której nie macie fizycznego dostępu, a jedynie poprzez PowerShella?
Otóż w sposób jak poniżej (działa na Windows 10).
Enter-PSSession -ComputerName "nazwa_komputera" -Credential (Get-Credential)Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -value 0Enable-NetFirewallRule -DisplayGroup "*Pulpit zdalny*"Co robicie gdy macie potrzebę dodania do listy gotowych ciągów znaków (lub liczb) jakiegoś tekstu na początku i końcu? Dla przykładu chcielibyście z przodu tekstu dodać słowo "przód", a tyłu słowo "tył" (prawda, że jestem kreatywny? ;D)
| Macie | Chcecie uzyskać | 
|---|---|
    
  | 
 	
 	  
  | 
Pewnie jest wiele sposobów na wykonanie tego zadania, ale jeżeli akurat żaden z nich nie przychodzi Wam do głowy, to może któryś z poniższych Was poratuje.
Tekst jest napisany pobieżnie bardziej jako wskazówka, niż dokładny instruktaż.
Jednym z lepszych gwarantów bezpieczeństwa naszych urządzeń ogólnie, czy też w szczególności znajdujących się na nich informacji, jest dwuskładnikowe uwierzytelnianie (2FA - Two factor authentication).
Chodzi w nim o to, że przy próbie zalogowania do jakiegoś zasobu (np. do interfejsu zarządzania routerem) po podaniu loginu i hasła, użytkownik proszony jest także o wprowadzenie kodu wygenerowanego przez zewnętrzną aplikację jak np. Google Authenticator, bądź Yubico Authenticator.
![]()  | 
| Prośba o podanie kodu uwierzytelniania dwuskładnikowego przy próbie zalogowania do routera Synology RT2600AC |