mała-wielka zmiana. MS16-072

chaoswyszła ostatnio poprawka, która zabezpiecza przed pewnymi scenariuszami MitM attacks. mniejsza-o-większość, szczegóły można doczytać na technecie, a ja chciałem się sqpić nad pewną drobną konsekwencją, która może sporo namieszać.

po zainstalowaniu tej poprawki, przestają działać te polisy, które filtrowane są na podstawie uprawnień dla poszczególnych obiektów, i nie posiadają dodanego 'authenticated users: Read’ . w efekcie po wylistowaniu gpresult, pojawia się komunikat: 'not applied (unknown)’ .

oczywiście – wedle 'best practices’ nie powinno się nigdy zdejmować tego uprawnienia, a tylko wyrzucać 'apply’, niemniej nigdy nie stanowiło to problemu.

widziałem już różne dziwne metody stosowania GPO u klientów – tak dziwne, że patrzyłem i nie wierzyłem, że można coś tak dziwnego wymyślić. efekt tego, że jakiś admin-samouk zaczął coś w pokrętny sposób wdrażać, a potem trzeba to było kontynuować, bo oczywiście posprzątanie to ryzyko i chaos. w takim środowisq, ta mała zmiana, będzie miała olbrzymi wpływ. dotknęło to również środowiska jednego z obecnych klientów, gdzie ktoś dzięki dziwnemu zestawowi uprawnień wdrożył polisy terminalowe w zupełnie odwrotny sposób – zamiast stworzyć GPO na komputer z 'loopback processing’, zrobione były polisy na użytkowników, z wyciętymi uprawnieniami dla komputerów. nadal nie jestem pewien, jakim cudem to w ogóle działało… przyszła poprawka i wymusiła porządki.

to tak jakby ktoś miał wątpliwości, czemu warto stosować proste, prawidłowe metody, zamiast dziwolągów, bazujących na nieudokumentowanych testach – po prostu z-dnia-na-dzień mogą przestać działać.

eN.

OneDrive for business – sync

TVtaki mały trick… ponieważ po raz kolejny rozwaliła się lokalna biblioteka, i ponieważ po raz kolejny straciłem czas i nerwy, a do normalnej wersji zostało jeszcze ok. pół roq, mały tips, który może oszczędzi komuś zgrzytów:

  • jeśli otworzy się bibliotekę z Edge albo FF to zostanie się przekierowanym na stronę z downloadem całego office2o13 – zainstaluje się 1GB po to, żeby był klient OneDrive2o13, i zaczyna tak bruździć, że pozostaje tylko usunięcie profilu użytkownika.
  • ale jak otworzy się z IE, to okazuje się, że ten klient z office16 zawiera odpowiedniego klienta i jednak potrafi synchronizować, i wtedy na jakiś czas znów można korzystać…

… aż znów z niewiadomych powodów zacznie się kaszanić. średnio biblioteka współdzielona wytrzymuje mi ok. miesiąca i zaczyna się rozjeżdżać /:

kilka rzeczy, których robić nie wolno, bo generują problemy [nie zawsze, ale lepiej unikać], dla bibliotek z wymuszeniem check-in:

  • zapisywać plik z Internetu/załącznik z maila. chodzi o ADS, który bloqje synchronizację
  • nadpisać plik. trzeba usunąć, wymusić sync i nagrać
  • korzystać z aplikacji, które robią lock na plikach

eN.

CSV, SSV… ? ULSLSSV!

Windows_PowerShell_iconwpis z cyklu 'człowiek uczy się całe życie’ (; od zawsze pluję się, że durny Excel pliki CSV – Comma Separated Value – zapisuje/odczytuje jako Semicolon Separated Value z niewyjaśnionych przyczyn.

okazuje się, że sprawa jest bardziej skomplikowana i to nie jest ani CSV, ani SSV tylko ULSLSSV – czyli User Language Specyfic List Separator Separated Value (;

listSeparator

o ile dla US „List separator” to przecinek, więc dla Amerykanów CSV to CSV o tyle dla Polaków „List separator” to średnik… jest to dodatkowe utrudnienie na które trzeba uważać w skryptach bo mogą uruchamiać je osoby o różnych ustawieniach regionanych. o ile głupotą jest że CSV to SSV kod jest prosty:

import-csv/export-csv -delimiter ';'

a prawidłowo-bezpiecznie, w skryptach trzeba uważać i zamienić to na:

import-csv/export-csv -delimiter -useCulture

eN.

port ping

repairjak szybko sprawdzić czy dostępna jest już konkretna usługa/aplikacja na hoście? najlepiej sprawdzić czy port jest otwarty. można użyć telnetu ale jeśli czekamy na usługę i chcemy wykonywać testy co jakiś czas, aż do sqtq – będzie to bardzo denerwujące, ponieważ telnet jest bardzo siermiężny.

lepiej jest pingować port – co można uzyskać np, przy pomocy psping z sysinternalsowych narzędzi.

PS C:\Program Files\Sysinternals> .\psping.exe 192.168.1.4:3389

PsPing v2.01 - PsPing - ping, latency, bandwidth measurement utility
Copyright (C) 2012-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

TCP connect to 192.168.1.4:3389:
5 iterations (warmup 1) connecting test:
Connecting to 192.168.1.4:3389 (warmup): 67.36ms
Connecting to 192.168.1.4:3389: 56.57ms
Connecting to 192.168.1.4:3389: 41.25ms
Connecting to 192.168.1.4:3389: 51.04ms
Connecting to 192.168.1.4:3389: 41.95ms

TCP connect statistics for 192.168.1.4:3389:
Sent = 4, Received = 4, Lost = 0 (0% loss),
Minimum = 41.25ms, Maximum = 56.57ms, Average = 47.70ms

eN.

dopełnienie zerami

Windows_PowerShell_iconprzykładowy scenariusz: mamy notację nazewniczą serwerów ze stałym prefixem 'server’ oraz jego kolejny numer – liczba z dopełnieniem zerami do trzech znaków. np. server001, server002[…],server011[…],server12o[…]

problem: jak skryptem łatwo wygenerować takie nazwy?

rozwiązanie: i na to oczywiście jest skrót/automat w PS (: potrafi to funkcja 'toString’ – wystarczy jako parametr podać ilość zer odpowiadająca dopełnieniu.

PS> 1..200|%{ 'server'+$_.toString("000") }
server001
server002
[...]
server011
server012
[...]
server099
server100
[...]

eN.

 

 

hurtowe pobranie mediów z doqmentów office

dziś ponownie goszczę na blogu Adriana, który zasila WF systemowymi tips’n’tricks (:

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

Jak szybko „wyciągnąć” wszystkie zdjęcia i video z pliku Powerpoint , Word lub Excel?

Niejednokrotnie spotkałem się z prośbą lub pytaniem znajomych o szybki sposób na hurtowy eksport obiektów z plików pakietu Office. Oczywiście, można to zrobić ręcznie, eksportując każde ze zdjęć, ale nie o to przecież chodzi.

Otóż jest pewien sposób na dość szybkie wydobycie z naszych prezentacji lub dokumentów wszystkich mediów – zdjęć, dźwięków lub Video – w formie oddzielnych plików.

Jak to zrobić ?

Wystarczy zmienić rozszerzenie pliku np. powerpoint’a z PPTx na zip:

media02media01


po dokonaniu zmiany wystarczy dwukrotnie kliknąć na archiwum i w strukturze folderów wyszukać folder Media w którym to będą pliki których szukamy.

media03

Adrian Szwejkowski

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

eN.

Windows 1o: run as different user

repairdzisiejszy wpis przygotowany jest przez Adriana. ostatnio zrobiło się mocno PowerShellowo, a dzięki takim wpisom udaje się wrócić do pierwotnej formuły W-F, ponieważ pomimo, iż pojawiają się fragmenty kodu, to temat jest czysto systemowy (:

„Jako priority number uno przyjmuję udowadnianie jak bardzo wizerunek człowieka związanego z branżą IT różny jest względem przyjętych stereotypów (podobno czasem się udaje) . Jestem pasjonatem technologii Microsoft, a szczególnie rodziny produktów System Center, nie zapominam jednak o innych dobrych rozwiązaniach. Architekt , Analityk, Administrator (AAA?) – a gdy się ściemni PowerShell Ninja. Słowem nieco udomowiony Geek zarażający swoją pasją Syna. I odpowiadając na pytanie – Nie, do snu nie czytam mu dokumentacji technicznej ;-)

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

Pracując od dłuższego czasu na najnowszym systemie operacyjnym ze stajni Microsoftu- Windowsie 10 coraz to bardziej doskwierał mi brak bezpośredniej możliwości uruchomienia programu w kontekście innego użytkownika z poziomu GUI a konkretnie z wyszukanych aplikacji w Menu Start.  Administratorom systemowym niejednokrotnie potrzebna będzie możliwość uruchomienia danej aplikacji nie tylko przy pomocy zwiększonych uprawnień (elevated rights) ale również przy wykorzystaniu zupełnie innego konta.

Niestety funkcjonalność ta domyślnie nie jest dostępna  w Menu Start – opcje które widzimy ograniczają się do poniższej listy

image1

Zanim powiemy sobie w jaki sposób dodać tutaj magiczny „Run as different user” powiedzmy w jaki sposób na szybko możemy spróbować obejść ten problem nie rozpisując się zbytnio nad każdym z nich

  1. Możemy wyszukać aplikacje i przypiąć ja do TaskBar’u po czym użyć dobrze nam znanej kombinacji
    Shift + prawy przycisk myszy na skrócie i wybór opcji „Run as a different user”  – tadam
    unnamed
  2. Dla oldschoolowców znających ścieżkę aplikacji lub posiadających ścieżkę do niej w zmiennej typu path możemy wykorzystać  Command Line i opcje Runas z przysłowiowego palca
    Najprostszy syntax wygląda następująco  :

    Runas /user:login@domena aplikacjadouruchomienia.

    unnamed02
    Więcej na temat dodatkowych opcji i samego syntaxu aplikacji Runas znajdziecie tutaj – https://technet.microsoft.com/en-us/library/bb490994.aspx

  3. Oczywiście można by wykorzystać tez powershella który jak zwykle daje nam „nieco” więcej możliwości Commandlet który może przyjść nam z pomocą to „start-process” z przełącznikiem credentials (lub jak kto woli „runas”)

unnamed03Więcej na temat dodatkowych opcji i samego syntaxu commandletu Start-Process znajdziecie tutaj – https://technet.microsoft.com/library/hh849848.aspx lub za pomocą komendy „get-help start-process” (pamiętajcie o aktualizacji „helpa” ;) )

 

Ale przecież nie o to nam chodzi – mimo całej wspaniałości jaka niewątpliwie jest powershell lub możliwość klikania jednak fajnie by było dorzucić sobie opcje uruchomienia w kontekście innego użytkownika bezpośrednio z GUI

Jak więc to zrobić? –  z pomocą przyjdzie nam pewna drobna modyfikacja rejestru – aby nie dawać uprawnienia każdemu polecam dokonać edycji w hive Current User

GUI version  – Regedit

Uruchamiamy Menu start i wpisujemy Regedit – uruchamiamy  i przechodzimy do ścieżki

HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows

Tworzymy nowy klucz (Key) o nazwie Explorer  jeżeli jeszcze nie istnieje

W nowo powstałym kluczu tworzymy wartość typu Dword o nazwie ShowRunasDifferentuserinStart i zmieniamy jej wartość na 1

Restart i gotowe ;)

GUI Version – Gpedit

Uruchamiamy Menu start i wpisujemy gpedit  – uruchamiamy

W nowo otwartym oknie przechodzimy do „user Configuration” -> Administrative Templates -> “Start Menu and Taskbar” – następnie wyszukujemy ustawienie „Show ‘Run as Different user’ command on Start”  – przestawiamy ustawienie na Enabled ;)

No Restart Needed!

PS version 

Odpalamy Powershella I

#Begining 
Set-Location HKCU:\SOFTWARE\Policies\Microsoft\Windows 
if((Test-Path .\Explorer) -eq $false) 
    { 
        New-Item Explorer -Force 
    } 
Set-Location .\Explorer 


if((Get-ItemProperty -Path . -Name ShowRunasDifferentuserinStart -ErrorAction SilentlyContinue) -eq $null) 
    { 
        New-ItemProperty -PropertyType Dword -Name "ShowRunasDifferentuserinStart" -Value 1 -Path . 
    } 
        ELSE
   { 
            Set-ItemProperty -NAME "ShowRunasDifferentuserinStart" -Value 1 -Path . 
    } 
#End

Lazy Version

Chcemy mieć to z głowy ? Pobieramy plik Reg i uruchamiamy go dwukrotnie klikająć

http://1drv.ms/1MjsSaT

Restart i gotowe ;)

Jezli opcja konfiguracji która wybraliśmy wymaga restartu to po jego dokonaniu powinniśmy widzieć już dodatkowa opcje w menu kontekstowym po kliknięciu prawym przyciskiem myszy na aplikacji w menu start tadam.

image5

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

eN.

 

jak przeszukiwać Internet przy pomocy PowerShell (;

800px-Mucha-jobdzisiejszy wpis jest przygotowany gościnnie przez Kacpra. Kacper jest specjalistą SCCM i szeroko rozumianej automatyzacji/orkiestracji, co tłumaczy odwołanie się do metod zakrawających na developerkę, gdy UI w postaci formatek dostarczanych przez dostawcę nie wystarczyło. jest to też bardzo ciekawy przykład tego, jak uniwersalny jest PS…

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

Nie znasz dnia, ani godziny kiedy może się przydać PowerShell. Szukałem ostatnio lodówki z kostkarką i trafiłem w ten sposób na stronę w http://www.liebherr.aged.com.pl/. Niestety twórca filtra produktów nie przewidzał, że ktoś mógłby szukać lodówki ze wspomnianą kostkarką. Mogłem oczywiście znaleźć sobie jakąś inną stronę czy sklep internetowy. Jednak mój wewnętrzny nerd został podrażniony, nie było już odwrotu. :) Postanowiłem zaprząc PowerShella do tego zadania, jak to mam w zwyczaju. Trzeba było napisać małego crawlera, który znajdzie to czego mi się nie chciało samemu szukać. Efektem postanowienia jest poniższy skrypt:

$rootUris = 'http://www.liebherr.aged.com.pl/produkty/urzadzenia-domowe/side-by-side-i-frenchdoor/', 'http://www.liebherr.aged.com.pl/produkty/urzadzenia-domowe/zamrazarki/', 'http://www.liebherr.aged.com.pl/produkty/urzadzenia-domowe/chlodziarko-zamrazarki/', 'http://www.liebherr.aged.com.pl/produkty/urzadzenia-domowe/chlodziarko-zamrazarki-do-zabudowy/'

$rootUris | ForEach-Object {
    $rootUri = $_
    $response = Invoke-WebRequest -Uri $rootUri
    $links = ($response.Links | Where-Object href -match '.html').href | Sort-Object -Unique

    $urisArray = @()
    $links | %{
        $uriResponse = Invoke-WebRequest -Uri $_
        $urisArray += $uriResponse.RawContent
    }

    Write-Host $rootUri -ForegroundColor Green
    $features = 'Ice Center', 'IceCenter', 'IceMaker'
    $regex = '(?i)<title[^>]*>(.*)</title>'
    $features | ForEach-Object {
        $feature = $_
        
        $urisArray | Where-Object {$_ -match $feature} | ForEach-Object {
            $content = $_
            $result = [Regex]::Matches($content, $regex)
            $result | ForEach-Object {
                "$($feature): $($_.Groups[1].Value)"
            }
        }
        
        #$urisArray | Where-Object {$_ -match $feature} | Select-String -Pattern "<title>.*<\/title>" | %{"$($feature): $($_.Matches.Value)"}
    }
}

O dwóch rzeczach należy wspomnieć. Cmdlet Invoke-WebRequest i wykomentowanej linii na końcu. Invoke-WebRequest wywołuje uczucia ambiwalentne. Z jednej strony ma kilka fajnych funkcjonalności jak np. użyta właściwość Links zwracanego obiektu. Zawiera ona tablicę linków które znajdują się na stronie, więc nie trzeba się bawić w regexy i szukać ich samodzielnie. Jest też kilka innych ciekawych właściwości jak np. Images czy InputFields. niestety Invoke-WebRequest ma też jedną wadę, która może być w pewnych sytuacja dosyć uciążliwa. Mianowicie dosyć słabo sobie radzi z kodowaniem UTF8 bez BOMa. A w zasadzie to w ogóle sobie nie radzi i zwraca po prostu krzaki jeśli na stronie są np. polskie znaki diaktryczne. I niestety nic się nie da z tym zrobić w zasadzie, a przynajmniej mi się nie udało. Jako obejście można skorzystać z klas .NET Net.WebRequest i Net.WebResponse, ale tracimy wtedy opisane wcześniej zalety Invoke-WebRequesta.

Natomiast wykomentowana linia to pierwsza wersja pętli, która znajduje się bezpośrednio nad nią. Korzystając z Select-Stringa nie da się pobrać zawartości znacznika title, bez samego znacznika. Ponownie trzeba się odwołać do klasy .NET Regex, która zwraca grupy dopasowań, a dzięki nim mamy także dostęp do samej zawartości znacznika.

Kacper.

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

eN.

Praca po nocy

Dziś wpis o niskim współczynniku zawartości power shella i twardej administracji, ale mam nadzieje, że nie mniej pomocny.
Po nocy przed monitorem siedzi każdy z nas, może nie z taką częstotliwością jak na studiach #goodoldtimes, ale przynajmniej okna serwisowe wypadają gdy słońce już dawno zaszło. Kiedyś, pisząc kolejne projekty na zaliczenie zwracałem uwagę na zbyt jasne oświetlenie monitora, szczególnie tła kartki w Wordzie. W nowych Windowsach, (tak gdzieś od 7) nie mogłem znaleźć tego ustawienia, a tu z pomocą przychodzi dedykowany program F.lux.
https://justgetflux.com/
Narzędzie automatycznie dostosowuje temperaturę kolorów monitora po zachodzie słońca. Sprawdziłem wczoraj w nocy – działa perfekcyjnie. Małe, proste, łatwo w razie czego wyłączyć na chwilę.
Polecam.

Dodatkowo jak już siedzimy po nocy, można zajrzeć na stronę o zdrowym śnie, sygnowaną przez Uniwersytet Harwarda: http://healthysleep.med.harvard.edu/portal/.

zmiana hasła użytkownika w kontexcie innego użytkownika

repairprzykładowy scenariusz:

dostęp do sieci klienta via VPN. nie ma możliwości zmiany hasła podczas połączenia VPN, ponieważ to niekoszerne rozwiązanie. hasło wygasło. inny pracownik ma swoje konto nadal aktywne – czy da się zmienić szybko hasło, zamiast czekać aż helpdesk przetrawi ticket?

dostępne opcje(, które raczej nie zadziałają):

  • połączyć się RDP do DC. w przeciwieństwie do połączenia do member servera, podczas połączenia do DC jest możliwość zmiany wygasłego hasła. warunek jest taki, że trzeba mieć uprawnienia do logowania na DC, czyli zazwyczaj – być Domain Adminem.
  • w starym wpisie na stronach Technet znajdujemy opis, że można zmienić hasło przy pomocy 'net user * /domain’. jest to niekompetencja osoby piszącej KB, ponieważ nie odróżnia ona 'reset password’ od 'change password’. przy pomocy net user można hasło wyłącznie zresetować, co wiąże się z posiadaniem odpowiednich uprawnień do konta, na którym wykonuje się operację. dalszy opis w tym KB jest również bzdurą, ponieważ uprawnienia domain admina nie są wymagane – można to skonfigurować nawet dla pojedynczych kont.

rozwiązanie

jest oczywiście sposób skuteczny, działający i niewymagający żadnych specjalnych uprawnień. i oczywiście przy pomocy PowerShell, a konkretnie commandleta Set-ADAccountPassword:

Set-ADAccountPassword -Identity <user-with-expired-password> -OldPassword (ConvertTo-SecureString -AsPlainText "OLDPASSWORD" -Force) -NewPassword (ConvertTo-SecureString -AsPlainText "NEWPASSWORD" -Force)

sprawdzałem dla PS 2.o i wystarczy.

eN.