2016-12-06
Napisanie skryptu generującego hasło, to jedno z przyjemniejszych zadań programistycznych. Jest for, są iteracje, jest random. Mniam mniam. Dobra funkcja generująca hasło to jednak coś innego! I właśnie taką udało mi się znaleźć. To co w niej jest najlepsze, to że:
- można określić z jakiej grupy znaków należy generować hasła oraz
- masz gwarancję, że z każdej grupy zostanie wzięty co najmniej jeden znak
Pomyśl teraz (przyjaźnie) o swoim administratorze domeny. Czy nie masz wymogu definiowania hasła o określonej długości ze znakami z określonych grup? Funkcja pochodzi z http://stackoverflow.com/questions/37256154/powershell-password-generator-how-to-always-include-number-in-string (odpowiedź opublikowana przez iRon).
Function Get-Password
{
Param(
[cmdletbinding()]
#Length of the password
[Int]$Size = 8,
#Charactersets that can be used when password is generated Uppercase, Lowercase, Numbers, Symbols
[Char[]]$CharSets = "ULNS",
#Characters to skip during password generation
[Char[]]$Exclude)
#Here final password letters will be saved
$Chars = @();
$TokenSet = @()
#define table of allowed character lists
If (!$TokenSets)
{
$TokenSets = @{
U = [Char[]]'ABCDEFGHIJKLMNOPQRSTUVWXYZ' #Upper case
L = [Char[]]'abcdefghijklmnopqrstuvwxyz' #Lower case
N = [Char[]]'0123456789' #Numerals
S = [Char[]]'!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~' #Symbols
}
}
#for each set of charactersets allowed (U/L/N/S)
foreach ($characterSet in $CharSets)
{
#take the table of characters in this character set skipping those characters that should be excluded
$Tokens = $TokenSets["$characterSet"] | ForEach {If ($Exclude -cNotContains $_) {$_}}
#if still some characters left (should be usually the case)
If ($Tokens)
{
#generate the table of only the valid characters
$TokensSet += $Tokens
#as we guarantee that at least one character of each character set will
#be present in the password, we take here one character from the list
$Chars += $Tokens | Get-Random
}
}
#now we get random number of characters from the approved list
While ($Chars.Count -lt $Size)
{
$Chars += $TokensSet | Get-Random
}
#finally we return the result - the list of charaters needs to be converted to a string
($Chars | Sort-Object {Get-Random}) -Join ""
};
Czytaj dalej »
2016-12-06
Podczas ładowania skryptu lub ładowania modułu można otrzymać bład/komunikat/pytanie:
Security Warning Run only scripts that you trust. While scripts from the Internet can be useful, this script can potentially harm your computer. Do you want to run \server\scripts\my.ps1? [D] Do not run [R] Run once [S] Suspend [?] Help (default is „D”):
Komunikat właściwie nie zabrania uruchomienia skryptu, ale problemem jest to, że się… pokazuje!
Przyczyna jest taka, że jeśli plik jest oznaczony „jako pobrany z Internetu” albo znajduje się w ścieżce intranetowej, to podczas uruchamiania go brane są pod uwagę ustawienia bezpieczeństw Internet Explorera „Enhanced Security Configuration”.
Do spróbowania 3 rozwiązania:
- Wyłączyć ESC (Server Manager >> Local server >> IE Enhanced Security Configuration
- Potraktować pliki skryptu poleceniem Ublock-File
- Zmienić policy na BYPASS
Ja zastosowałem metodę numer 3 i pomogło!
2016-12-04
To chyba dosyć typowy scenariusz. Kupujesz komputer, ale fundusze nie pozwalają na zakup wymarzonej wszystkomającej wersji, więc trzeba trochę oszczędzać. W laptopie najczęściej chyba zdecydujesz się na zakup komputera ze standardowym dyskiem HDD, bo przecież z czasem wymiana dysku na SDD nie będzie problemem. W końcu nadchodzi ten dzień i postanawiasz kupić dysk SSD, Jest prawie pewne, że nowy dysk SSD będzie miał mniejszą pojemność niż stary dysk HDD.
I tu mogą się pojawić pewne problemy:
- Jak przenieść dane z większego dysku HDD na mniejszy dysk SSD
- Jak przenieść dane z dysku systemowego Windows 10
- Jak wykonać optymalizację przenoszonych danych z dysku HDD na dysk SSD
- Jak to zrobić bezpiecznie i … za darmo?

Poszukałem kilku rozwiązań i to jedno spodobało mi się najbardziej i na dodatek zadziałało od razu. Zacznijmy najpierw od przygotowania dysku SSD. Jeżeli dysk jest zupełnie nowy to nie trzeba wykonywać tego kroku. Mój „nowy” dysk SSD pochodził z innego komputera, więc zacząłem od wyczyszczenia:
- Podłącz dysk do komputera jako drugi dysk (np. po USB)
- Uruchom jako administrator cmd i wpisz diskpart
- Poleceniem list disk wyświetl listę dysków. Patrząc np. na wielkość dysku zidentyfikuj numer dysku SSD, U mnie był to dysk numer 1. Pamiętaj, że w diskpart numeracja dysków rozpoczyna się od zera. Za chwilę rozpocznie się kasowanie partycji na dysku, co jeśli zostałoby wykonane w niepoprawny sposób, to spowoduje utratę danych, dlatego… bardzo uważaj!
- Wpisz select disk <numer> wskazując na swój dysk SSD
- Wpisz list partition, żeby zobaczyć partycje istniejące na dysku
- Kasuj po kolei każdą partycję wpisując „delete partition <numer> override„. Na bieżąco można sprawdzać postęp kasowania partycji powtarzając polecenie „list partition” tak długo aż lista partycji na dysku SSD będzie pusta.
Czytaj dalej »
2016-12-03
Typ danych pozwalający na zapisywanie w bazie danych SQL informacji o współrzędnych geograficznych jest dostępny już od wersji 2008. Oprócz całego zakresu funkcjonalności z jakiego można korzystać pracując z danymi geograficznymi, typ ten ma jeszcze to do siebie, że jest… ładny! Rzeczywiście podczas uruchamiania zapytania zwracającego dane typu GEOGRAPHY wyświetlana jest dodatkowa zakładka „Spatial results”, która pozwala zobaczyć mapy w postaci graficznej.
Ot np. oto wynik zapytania:
SELECT * FROM dbo.World

A to następny przykład:
SELECT * FROM dbo.World WHERE COUNTRY = 'Poland’
Czytaj dalej »
2016-11-25
Załóżmy, że masz moduł testlib.psm1 o następującej zawartości:
function test-it
{
[cmdletbinding()]
param()
return 1
}
function test-this
{
[cmdletbinding()]
param()
return 2
}
Domyślnie, jeżeli uruchomisz polecenie
Get-Command -Module testlib
to otrzymasz wynik prezentujący funkcje modułu ale numery wersji będą wskazywać 0:

Aby zmienić numer wersji funkcji można stworzyć tzw. manifest do modułu. W manifeście można między innymi wskazać na numer wersji. Oto polecenie tworzące plik manifestu: Czytaj dalej »
2016-11-25
W HyperV można zdefiniować wirtualną sieć dla wirtualnych komputerów. Te sieci można definiować jako external, internal i private. Jakie było moje zdziwienie kiedy po zdefiniowaniu nowej sieci typu external zobaczyłem komunikat, że spowodowałem… katastrofę. Na dodatek żadne restarty, usuwanie innych istniejących sieci nie pomagały. Co było przyczyną?
Otóż kilka dni wcześniej też definiowałem sieci i stworzyłem sieć internal. Sieć internal posiada własną wewnętrzną adresację, ale jeden z adresów staje się wewnętrzną bramą za pomocą której można z wewnętrznej sieci sięgnąć do internetu. Podczas definiowania sieci internal na komputerze hoście jeden z interfejsów sieciowych ma włączaną opcję współdzielenia łącza internetowego. W moim przypadku po pewnym czasie usunąłem sieć internal jednak połączenie na komputerze hoście nadal było oznaczone jako współdzielone. I to właśnie było przyczyną… katastrofy.

Wystarczyło odszukać interfejs z zaznaczoną opcją współdzielenia sieci i ręcznie odznaczyć pole, a potem powtórzyć proces definiowania sieci w HyperV. Więcej na ten temat:
http://www.hurryupandwait.io/blog/understanding-networking-options-with-a-wireless-hyper-v-host-and-solving-catastrophic-failure-0x8000ffff
2016-11-23
IIS Application pool pozwala między innymi zdefiniować konto na jakim będzie pracować aplikacja na systemie windows. W IIS managerze nie jest to wcale trudne: kliknij prawym przyciskiem myszy na wybranej ApplicationPool >> Wybierz Opcje zaawansowane >> kliknij Identity i wpisz nazwę konta i jego hasło. Kilka OK i gotowe!
A co jeśli to samo należy wykonać z poziomu PowerShell i modułu WebAdministration?
Zacznijmy od wyświetlenia właściwości ApplicationPool:
Get-ItemProperty 'IIS:\AppPools\TigerAppPool' | FL *
Wynik widać na obrazku poniżej. Domyślnie zaprezentowane są właściwości z sekcji General a inne właściwości są „ukryte” w grupach. Bezpośrednie właściwości w okienku IIS managera i w wyniku komendy powershell zaznaczone są poniżej na żółto. Grupy kryjące w sobie dodatkowe właściwości są zaznaczone na czerwono:
Czytaj dalej »