SkypeOnlinePowershell wywala się błędem o braku VC++ redistributable

exploruję tamat BOTów (super sprawa pod kontem obniżenia kosztów HelpDesk!) i aby zarejestrować BOTa w SfB dla tenanta trzeba zainstalować bohatera tytułowego – Skype for Business Online Connector. pomimo spełnienia wszystkich warunków (prerequisites), instalator wywala się z informacją, że brakuje VS C++ Redistributable. trochę się z tym pomęczyłem, nic nie udało mi się znaleźć na forach, więc trzeba grzebnąć samemu.

główny log nic powiedział, ale w logu *_TenantPowerShell.msi.txt jest coś takiego:

MSI (s) (08:10) [23:39:07:026]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (s) (08:10) [23:39:07:026]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64 3: 2 
MSI (s) (08:10) [23:39:07:026]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (s) (08:10) [23:39:07:026]: PROPERTY CHANGE: Adding PROPERTY_POWERSHELL_V51_INSTALLED property. Its value is '1.0, 2.0, 3.0, 4.0, 5.0, 5.1'.
MSI (s) (08:10) [23:39:07:027]: Skipping action: SetReinstallMode (condition is false)
MSI (s) (08:10) [23:39:07:027]: Doing action: FindRelatedProducts
Action ended 23:39:07: AppSearch. Return value 1.
Action start 23:39:07: FindRelatedProducts.
MSI (s) (08:10) [23:39:07:028]: Doing action: LaunchConditions
Action ended 23:39:07: FindRelatedProducts. Return value 1.
Action start 23:39:07: LaunchConditions.
MSI (s) (08:10) [23:39:09:307]: Product: Skype for Business Online, Windows PowerShell Module -- Skype for Business Online, Windows PowerShell Module installation or uninstallation requires that Microsoft Visual C++ 2017 x64 Minimum Runtime - 14.10.25008 Package is already installed.

no to już blisko rozwiązania… bo wskazana ścieżka nie istnieje. znalazłem wpisy od innych paczek VS redist i na tej podstawie zrobiłem nowy plik reg do obecnej wersji:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64]
"Version"="v14.16.27012.01"
"Installed"=dword:00000001
"Major"=dword:0000000e
"Minor"=dword:00000010
"Bld"=dword:00006984
"Rbld"=dword:00000001

instalator łyknął. gra i buczy (:

eN.

 

 

ShareCon365 już niedługo!

Już niedługo, 23 listopada, odbędzie się konferencja ShareCon365. ShareCon365 – zgodnie z nazwą – zapoczątkował swoją przygodę jako grupa społeczności SharePoint, jednak szybko okazało się, że trzeba objąć cały Office365. 

to, co odróżnia tą konferencję to m.in. fakt, iż będą 3 ścieżki: Biznesowa, ITPro … oraz to, iż większość sesji będzie w języq angielskim – ze względu na gości z poza Polski, zarówno w roli słuchaczy jak i prelegentów (Steve Dalby, Sergei Sergeev).

w tym roq 5ta edycja konferencji SC365, na której będę miał zaszczyt również prezentować. temat prezentacji to: Ultimate guide to Office365 Groups. (sesję powtórzę w języq polskim na styczniowym WGUiSW)

pełna agenda

spotykamy się, jak zwykle – w biurze Microsoft (:

ZAPRASZAM

eN.

konwersja XLSX do CSV metodą przeciągnij i upuść

drag’n’drop wygląda jakoś bardziej naturalnie… ale co tam. niech będzie po polsq (;

taka sytuacja…

spora część mojej pracy to zbieranie i analiza danych z systemów – AD, AAD, Ex, EXO, SfB i tak dalej. piszę sobie do tego pałerszelki i wrzucam to do CSV. no niestety – ale cały czas nie mogę się przestawić na jakąś sensowną bazę danych, ale to nie na dziś. potem takie CSVki łatwo jest otworzyć, edytować, analizować w Excel – oczywiście już jako xlsx. wszyscy Excel znają (LoL, raczej potrafią go otworzyć i coś wpisać, bo niestety poziom obsługi podstawowych narzędzi jest niestety, na równie podstawowym poziomie), dzięki o365 mamy wspaniałe funkcje koedycji – a więc w prosty sposób cały zespół może pracować na pojedynczym źródle.

żeby odświeżyć dane w excel, znów muszę wyeksportować go do CSV. czyli:

  • otworzyć arkusz
  • zrobić export (kilka kliknięć, wybór formatu, nie pomylić się, bo jest kilka formatów CSV itd…)
  • zamknąć.

nie lubię klikać, a więc fajnie byłoby mieć ikonkę na pulpicie, przeciągam plik XLS i voila! CSVka sobie czeka w ustalonym miejscu.

taki przydługi wstęp, ale taki dzień. jak to zrobić?

automatyczna konwersja XLSX2CSV via drag’n’drop

  1. trzeba sobie machnąć prosty skrypcik PS, który konwersji dokona. np taki:

convert-XLSX2CSV.ps1

param(
  [string]$fileName
)

if(-not (test-path $fileName)) {
  write-host "$fileName not found. exitting"
  exit
}

write-host "converting $fileName ..."

$file=get-childItem $fileName
if($file.Extension -ne '.xlsx') {
  write-host "$fileName doen't look like excel file. exitting"
  exit
}
try{
  $Excel = New-Object -ComObject Excel.Application
} catch {
  $Error
  exit
}
$Excel.Visible = $false
$Excel.DisplayAlerts = $false
$wb = $Excel.Workbooks.Open($fileName)
$wb.Worksheets[1].SaveAs("c:\temp\" + $File.BaseName + ".csv", 6,$null,$null,$null,$null,$null,$null,$null,'True')
$Excel.Quit()

write-host -ForegroundColor Green "convertion done. saved as c:\temp\$($file.BaseName).csv"
write-host "press any key to finish."

$HOST.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") | OUT-NULL
$HOST.UI.RawUI.Flushinputbuffer()

nic skomplikowanego. jeśli ma być auto trzeba pamiętać, że ścieżki muszą być zahardcodowane, a parametry wejścia najlepiej ograniczyć do nazwy pliq.

2. zrobić skrót na pulpicie, który przyjmie plik drag’n’drop. jeśli zrobimy skrót do ps1 – nie zadziała. skrót musi być do pliq exe. a więc proste:

  • utwórz nowy skrót
  • jako plik do uruchomienia:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -file C:\_scriptZ\convert-xlsx2csv.ps1

…no i w zasadzie tyle. teraz wystarczy upuścić plik Excel na skrócie i życie jest dłuższe o kilka ładnych kliqw (=

bezpośrednia edycja XLSX

a nie można by tak bezpośrednio na excelu pracować? ano możnaby. nawet na serwerze. jest taka fajna biblioteka, która pozwala zaimportować się bez instalacji samego excel. nawet kiedyś o tym pisałem. ale obsługa tego skryptem, jest mówiąc oględnie – mało przyjemna. praca na zwykłych obiektach to czysta przyjemność.

eN.

 

dsregcmd switches – undocumented

nieudokumentowane przełączniki dsregcmd.exe

nie wiem czemu to polecenie nie ma żadnej wbudowanej pomocy, nie ma też oficjalnej strony. a więc trzeba było trochę się grzebnąć w exe i sprawdzić. kilka rzeczy które udało mi się wyciągnąć:

lista przełączników dla deregcmd.exe :

/Debug
/Pause
/Leave
/Status
/Trigger
/CheckRecovery
/ForceRecovery
/RollbackRecovery

z tego co udało mi się ustalić to:

  • status: to jedyny, który pojawia się oficjalnie w wielu artyqłach. pokazuje status dla komputera i użytkownika – AD, AAD, WorplaceJoin
  • debug:  polecenie powinno działać w kontekście systemu. czyli np: ‘psexec -s -i cmd.exe‘ i z tąd odpalić dsregcmd /debug – dostaniemy informacje o precheck, statnie kluczy szyfrujących niezbędnych do operacji itd. może się przydać jeśli maszyna upiera się i nie chce się zarejestrować w AAD. można też debugować od strony samego AAD – ale pod warunkiem, że operacja została już zainicjowana. być może np. komputer nie ma połączenia z DC i w ogóle nie próbuje się podłączyć – wtedy tylko tak można spróbować sprawdzić czemu.
    co prawda niektóre artykuły wskazują polecenie dsregcmd /debug /join [przykładowy link do artu na dole] ale przełącznika join nie znalazłem w samym pliq exe. z moich testów wynika że ‘dsregcmd /debug’ pozwala na użycie wraz z którymś ze wskazanych tu przełączników, i działa to dokładnie jak tryb verbose.
  • leave: oczywiście wywalenie z AAD
  • trigger: wymuszenie rozpoczęcia próby rejestracji
  • pause: przed wykonaniem operacji będzie czekał… na enter. chwila zawieszki, bo komunikat brzmi ‘press any key’ ale dopiero enter pozwala kontynuować

do dokładnie robią flagi recovery… w sensie co jest odzyskiwane – nie jest jasne. po wykonaniu ‘dsregcmd /debug /CheckRecovery’ output standardowo jest taki:

dsregcmd::wmain logging initialized.
DsrCmdRecovery::DetermineIfRecoveryIsNeeded Machine is joined to Azure AD and domain.
DsrCmdRecovery::DetermineIfRecoveryIsNeeded returned 0x00000001 (RECOVERY NOT NEEDED).

po wykonaniu ‘dsregcmd /debug /ForceRecovery’ zostałem poproszony o zalogowanie się na swoje konto. na koniec informacja ‘możesz teraz używać tego komputera’ – ale nie widzę żadnych dodatkowych informacji w AAD, ani jakiegoś przypisania do konta.

scenariusz

na koniec krótkie ‘a po co mi to?’. aby w pełni wykorzystać możliwości zabezpieczania i sterowania stacjami z InTune, urządzenie musi być zarejestrowane w AAD. w przypadq maszyn domenowych mówi się o ‘hybrid join‘ bo są równocześnie dodane do AD i AAD. całą operacją steruje się prostym ustawieniem w GPO, więc teoretycznie pełny automat. dodam, że dla Windows 1o. dla Windows 7 jest dodatek ‘workplace join‘ ale ten ma normalną pomoc /? więc jest przyjaźniejszy w użyciu.

kiedy teoria nie działa w praktyce – wtedy warto przypomnieć sobie ten wpis.

refs

link do artów na temat procesu rejestracji urządzeń:

eN.