Siirry sisältöön

Remote desktop rdp file generated

When using a lot of virtual machines or any other remotedesktop connection, it would be nice to get personal rdp file properly saved  – ready to use on own work pc / cloud drive. After this I can get my most used remote desktop connection open quicly and without typing logins over and over again

I thought it is time to re-post this. I find a good solution from Petri.com with a help of Remko Weijnen password encryption utility.

image

Original posts :

https://petri.com/forums/forum/microsoft-networking-services/terminal-services/25839-automatically-create-rdp-file-with-password

And

https://www.remkoweijnen.nl/blog/2007/10/18/how-rdp-passwords-are-encrypted/

Simply check rdp file (saved by you) on your machine. It looks something like this (minimum as it generated by azure)

full address:s:52.169.105.36:3389
prompt for credentials:i:1
administrative session:i:1

download cryp/decrypt utility to get you password properly in:

cryptRDP5.zip (6.4 KB, 1 view)

To get it generated with a password you must do an old school cmd script like this

:: "hashtool"   – location of the hash tool
:: "outputfile" – destination and name for the .rdp file
:: "comp"       – computer name (can be FQDN or NetBIOS)
:: "domain"     – name of authenticating domain
::                  (if stand-alone enter computer name)
:: "usr"        – Username
@echo Off

If "%1"=="" Goto EOF

set pwd=%1
Set hashtool="cryptRDP5.exe"
set outputfile="computer1.rdp"
set comp=youraddress.com:[port number]
set domain=domain
set usr=myUsername

for /f "tokens=*" %%a in (’%hashtool% %pwd%’) do set pwdhash=%%a

:CreateRDP
If EXIST %outputfile% del %outputfile%
Echo screen mode id:i:2>> %outputfile%
Echo desktopwidth:i:1024>> %outputfile%
Echo desktopheight:i:768>> %outputfile%
Echo session bpp:i:24>> %outputfile%
Echo winposstr:s:0,1,32,68,800,572>> %outputfile%
Echo full address:s:%comp%>> %outputfile%
Echo compression:i:1>> %outputfile%
Echo keyboardhook:i:2>> %outputfile%
Echo audiomode:i:2>> %outputfile%
Echo redirectdrives:i:0>> %outputfile%
Echo redirectprinters:i:0>> %outputfile%
Echo redirectcomports:i:0>> %outputfile%
Echo redirectsmartcards:i:1>> %outputfile%
Echo displayconnectionbar:i:1>> %outputfile%
Echo autoreconnection enabled:i:1>> %outputfile%
Echo authentication level:i:0>> %outputfile%
Echo username:s:%usr%>> %outputfile%
Echo domain:s:%domain%>> %outputfile%
Echo alternate shell:s:>> %outputfile%
Echo shell working directory:s:>> %outputfile%
Echo password 51:b:%pwdhash%>> %outputfile%
Echo disable wallpaper:i:1>> %outputfile%
Echo disable full window drag:i:0>> %outputfile%
Echo disable menu anims:i:0>> %outputfile%
Echo disable themes:i:0>> %outputfile%
Echo disable cursor setting:i:0>> %outputfile%
Echo bitmapcachepersistenable:i:1>> %outputfile%
Echo drivestoredirect:s:*>> %outputfile%
:EOF

Logic App / CI / CD

Aluksi

Tässä kirjoituksessa tehdään Azure Logic App Serverless sovellus, joka käyttää FTP- ja Email palveluja Azure Function App ohjauksessa. Tarkoituksena on kuvata varsinaisen Logic App sovelluksen toiminta ja tekeminen Visual studio Desktopilla -  no… suurimmaksi osaksi, alun teen Azure portaalissa yksinkertaisuuden vuoksi. Ja sen takia että saadaan koodit ja Azure resource kuvaukset versionhallintaan Git repositorioon. Tämä tapa on edellytyksenä automatisoidulle buildeille ja deploylle (continuous integration & delivery). Saahan siihen sitten varmaankin vielä automatisoituja testejäkin, mutta palaan siihen toisella kertaa.

Tarkemman version kuvista saat klikkaamalla niitä.

Tarvikkeemme ovat

Visual Studio 2017. VS17 laajennuksia ei välttämättä tarvita mutta tästä linkistä saattaa löytyä jotakin hyödyllistä jolla ‘elämä’ tuntuu mukavammalta Smile http://vsixgallery.com/author/mads%20kristensen .

Ei myöskään ole välttämätöntä, mutta voit myös tutkia ARMClient :tia https://github.com/projectkudu/ARMClient
Azure subscription ja mahdollisuus aiheuttaa hieman kulujakin, mutta ‘spending limit’ kannattaa varmuudenvuoksi laittaa päälle jos käytät Pay-as-you-go tilausta.
VSTS team projekti ja mahdollisuus tehdä build & release määrityksiä.

Lue vielä tämä ennen kun aloitat tekemisen

Original picture from Jef Hollan

Tein muutamia muutoksia Jeff Hollanin kaksiosaiseen channel9 video demoon. Lopulta, isommat muutokset siihen on automaatiokelpoinen VSTS pipeline (CI&CD). Muuten noudattelen alkuperäistä esimerkkiä.

AZURE Portal

Uuden Logic App tekeminen

AZUREportal Ent Integration and LogicApp create 1

Kliksuttele –New,-Enterprise Integration ja Logic App ikoni.

AZUREportal Ent Integration and LogicApp create 2

Täytä tarvittavat tiedot

Name : blogs-csv-to-email
Valitse Subscription
Resource Group (New): ServerlessForBlogs
Location: Sopivin (suomessa esim. West Europe)
Log Analytics (tarpeen mukaan, voi protoiluissa jättää pois)
Pin to dashboard (tavallaan hyvä muikkariSmile)
Klikkaa Create ja odota hetki, kun RG luodaan…
Logic App luotu. Aloita tekemään varsinaista logiikkaa klikkaamalla juuri luotua LogicAppia “blogs-csv-to-email”

Klikkaa sen jälkeen Logic App Designer:

Azure portal voi uudelleen ohjautua LogicApp designeriin – jota seuraavaksi käytetäänkin, mutta klikkaa ko. ikkuna pois oikean reunan ‘X’ stä ja tarkastele tyhjää Logic App näkymää overview tilassa. Huomaa käytössä olevat valikot joista selviää paljon mielenkiintoista. Etupäässä nyt kiinnostaa Designer ja code view. Visual Studio desktopissa toiminnallisuus on sama ja suurimmaksi osaksi se näyttääkin tältä. Se osa käydään läpi tässä kirjoituksessa hieman myöhemmin.

AZUREportal Ent Integration and LogicApp create 3 blogs-csv-to-email

Kun olet valmis, siirry ‘takaisin’ Designeriin klikkaamalla ‘Logic App Designer’.

Valitse tyhjä pohja (Blank Logic App +)

AZUREportal Ent Integration and LogicApp create 4 blogs-csv-to-email Designer

Kirjoita connector & trigger hakuun FTP ja

AZUREportal Ent Integration and LogicApp create 5 blogs-csv-to-email FTP connector and triggersAZUREportal Ent Integration and LogicApp create 6 blogs-csv-to-email FTP connectors trigger

valitse ‘when a file is added or modified’ trigger FTP connectorista.

Tässä vaiheessa tietenkin tarvitaan FTP palvelin ja osoite + loginit. Sen tekee kädenkäänteessä avaamalla uusi selain ikkuna azure.com: iin ja siitä kliksutellaan tähän samaan resurssiryhmään ja tehdään tavallinen WebApp. Kun se on valmis kopsataan FTP tiedot ‘over view’ näkymästä ja tunnukset salasanoineen sa parhaiten lataamalla publishing settings ja avaamalla sen tekstieditorilla tai VS codella tms.

AZUREportal Ent Integration and LogicApp create 7 blogs-csv-to-email create FTP webappAZUREportal Ent Integration and LogicApp create 8 blogs-csv-to-email RG at the moment

Avaa vielä FTP clientti ja tee uusi yhteys juuri luomaari FTP palvelimeen. Huomaa että emails hakemisto on luotava FTP palvelimelle, jos haluat seurata kirjaimellisesti tätä opasta.

AZUREportal Ent Integration and LogicApp create 10 blogs-csv-to-email FTP connection to new FTP site

Tee vielä nyt kun tässä ollaan – vielä testi data faili csv muotoisena, mutta älä viellä siirrä sitä azure ftp saitille.

AZUREportal Ent Integration and LogicApp create 9 blogs-csv-to-email save this excel to csv file as LogicAppData

Ja sitten takaisin Logic App designeriin ja täyttämään FTP connetor triggerin parametrit:

AZUREportal Ent Integration and LogicApp create 6 blogs-csv-to-email FTP connectors triggerAZUREportal Ent Integration and LogicApp create 12 blogs-csv-to-email browse to emails folder on FTP site

Muut arvot, kuten 3 min intervalli saa jäädä sinne sellaisenaan. Se on ihan ok tähän tarkoitukseen.

Tässä vaiheessa valmiina on FTP yhteys joka herää ‘eloon’ kun emails kansioon tulee tiedosto. Sille tiedostolle halutaankin nyt seuraavaksi tehdä jotakin. Sitä varten tehdään Azure Function App joka lukee sisällön ja toimittaa jatkokäsiteltäväksi jokaisen rivin ja lopulta lähettää ko. rivillä olevaan emailiin muistutuksen.

Uuden Function App tekeminen

Valitaan uusi ‘action’ ja siitä Azure functions. Mutta koska funktio on tekemättä ja siihen tarvitaan hieman koodia. Tallenna nykyinen LogicApp ja/tai avaa uusi selain ikkuna ja navigoi samaan resurssi ryhmään ja tee uusi ‘New+’ Azure portal pää ikkunan vasemmasta yläkulmasta.

Kliksuttele New-Compute-FunctionApp

AZUREportal Ent Integration and LogicApp create 13 blogs-csv-to-email create a new functionapp

Näkymään tulee FunctionApp parametrit. Täytä ne:

App Name: blogs-csv-to-email
Subscription: Sama kun Logic Appillekkin
Hosting Plan: Consuption
Location: West Europe (Sama kun Logic Appillakin)
Storage Account: Tee uusi tai valitse haluamasi, kunhan se on sama Location (suosittelen tässä uuden luomista)

AZUREportal Ent Integration and LogicApp create 14 blogs-csv-to-email create a new functionapp

Klikkaa Create ja odota hetki.

Sillä aikaa kun Function App deploy on menossa esittelen koodin joka tähän kahteen funktioon tulee. Ensimmäinen on CSV-toJSON

AZUREportal Ent Integration and LogicApp create 15 blogs-csv-to-email create a new functionappCSV-to-JSON code

Funktion voi hyvin testata koodinliittämisen jälkeen kun otat näkyviin

Toinen funktio on JSON-to-EMAIL

AZUREportal Ent Integration and LogicApp create 16 blogs-csv-to-email create a new functionappJSON-to-Email code

Kun Function App deploy on valmis Azuressa, valitse blogs-csv-to-email nimen alta functions + (new). Klikkaa ‘Custom Function’ tai Webhook API c# valittuna (generic webhook).

AZUREportal Ent Integration and LogicApp create 17 blogs-csv-to-email create a new functionappCSV-to-JSON code

tai ‘Generic webhook C#’ (valitsen tämän tässä esimerkissä)

AZUREportal Ent Integration and LogicApp create 18 blogs-csv-to-email create a new functionappCSV-to-JSON code

Kirjoita nimeksi ‘CSV-to-JSON’ ja klikkaa Create.

Generoitu koodi korvataan vastaavalla (yllä) jonka voit hakea git reposta https://github.com/arvopaukkunen/serverless-tutorial-functions1

Korvaan koodi, klikkaa save, klikkaa myös ‘Get Function URL’ ja kopio URL koodi talteen – tarvitset sitä kohta. Tarkemmin sanottuna osaa siitä: (esim huom). Klimmaa vielä ‘View files’ niin saat koodi failit näkyville.

code=bbbbbbbbbbCuwNYeNsBM3OUYGfGqcetL5YYhCUwKs2NPHOfmqtaG1w==&clientId=default

Näkymä pitää tässä voiheessa näyttää tältä:

AZUREportal Ent Integration and LogicApp create 19 blogs-csv-to-email create a new functionappCSV-to-JSON code

Sitten samat temput toiselle tarvittavalle funktiolle JSON-to-EMAIL. Jonka jälkeen yllä jo näytetyt koodit ovat kopioituna ja valmiina vaikkapa testiin. Huomaa että JSON-to-Email function template on oltava ‘Generic Webhook JavaScript’. Muista klikata ‘Save’ kun olet kopsannut JavaScript koodit Git reposta.

Ja nyt takaisin Logic App Designeriin lisäämään Azure Function App käsittelemään jokainen rivi joka CSV tiedostosta löytyy:

AZUREportal Ent Integration and LogicApp create 21 add function app to Logic app

Ja valitse Azure functions – Juuri luotu Function app ja sen jälkeen juuri luotu CSV-to-JSON –funktio:

AZUREportal Ent Integration and LogicApp create 23 add function app to Logic app

Tässä vaiheessa Funktio odottaa ominaisuutt (Property) csv, joten kirjoitan sen actionin request bodyn alkuun. Tämä selviää, kun testaat CSV-to-JSON funktiota antamalla sille hieman aiemmin talteen otetun funktion URL koodin. Et voi kopioda koodia tästä esimerkistä, vaan suorita funtio saman näköisessä ikkunassa kun pyysin ottamaan URL koodin talteen. esimerkki ko. ikkuasta tässä alla. Huomaa että view files bladessa on ‘test’ osa johon tarvittava koodi syötetään. voi myös kopsata request bodyn tästä:

{
"csv": "Name,Email,Date\r\nCustomer Name,nimi@jokudomain.com,1/1/2017\r\nCustomer Name,nimi@jokudomain.com,1/1/2017"
}

Tuloksena pitää olla 200 – ok ja:

{"rows":[{"Name":"Customer Name","Email":"nimi@jokudomain.com","Date":"1/1/2017"},{"Name":"Customer Name","Email":"nimi@jokudomain.com","Date":"1/1/2017"}]}

Malli tässä:

AZUREportal Ent Integration and LogicApp create 24 add function app to Logic app

Tässä oli ensimmäinen ‘action’. Sitten tehdään seuraava jossa käytetään parse jsonia, koska muuten tarvittava ‘for each’ ei tiedä mitään luettavan csv failin rivimääristä ja ‘näkee’ vain request bodyn. Eli lisätään Data Operations – ParseJSON:

AZUREportal Ent Integration and LogicApp create 25 add function app to Logic app

valitse ‘body’ täg vaihtoehdoista ja käy kopsaamassa edellä kopiotu payload schemaa varten (koska se on tällätävalla helpoin ja nopein tapa saada schema). Tässä viellä uudelleen payload joka saatiin ajamalla funktio:

{"rows":[{"Name":"Customer Name","Email":"nimi@jokudomain.com","Date":"1/1/2017"},{"Name":"Customer Name","Email":"nimi@jokudomain.com","Date":"1/1/2017"}]}

AZUREportal Ent Integration and LogicApp create 26 add function app to Logic app

Liitä payload tähän…

AZUREportal Ent Integration and LogicApp create 27 add function app to Logic app

Klikkaa ‘Done’ ja tässä valmis schema käytettäväksi.

validin JSON scheman saa muullakin tavoin mistä vaan, mutta näin se generoidaan nopeasti poistumatta editorista.

Ja nyt lisätään vasta ‘for each’ luuppi ja voidaan valita ‘array’ joka on ‘näkyy’ ja on siis tiedossa.

AZUREportal Ent Integration and LogicApp create 28 add function app to Logic app

valitse New Step – More – Add a for each ja sen jälkeen ‘rows’

AZUREportal Ent Integration and LogicApp create 29 add function app to Logic app

Sitten valitaan JSON-to-Email Funktio joka kopioitiin Git reposta hieman aiemmin jo valmiiksi.

AZUREportal Ent Integration and LogicApp create 30 add function app to Logic app

Nyt jo tuttuun tyyliin – klikkaa Azure Functions ja valitse Function app ja sen JSON-to-Email funktio.

Ja koska funktio odottaa koko objektia, valitaan ‘rows item’

AZUREportal Ent Integration and LogicApp create 31 add function app to Logic app

Seuraavaksi tarvitseekin enää vain valita email lähetys filtteröimällä outlook konnektori ja valitsemalla alta send mail:

AZUREportal Ent Integration and LogicApp create 32 add function app to Logic app

valitse Send Mail:

AZUREportal Ent Integration and LogicApp create 33 add function app to Logic app

Kirjaudu emailiisi ja aseta tarvittavat tiedot lähetykseen:

AZUREportal Ent Integration and LogicApp create 34 add function app to Logic app

Huomaa, että Funktio nimet näkyvät ja nyt valitaan tietty ‘JSON-to-Email’

Ja muista viimeistään tässä klikata ‘Save’ Smile

Valmiinä sen tulee näyttää tältä:

AZUREportal Ent Integration and LogicApp create 35 add function app to Logic app VALMIS

Logic App Testaus

Kuvassa näkyy tallennuksen jälkeen kuinka 3 min välein tarkistetaan FTP palvelin uusien csv tiedostojen varalta.

AZUREportal Ent Integration and LogicApp create 36 add function app to Logic app TESTI

FTP palvelimelle täytyy nyt saada csv tiedosto ja se onnistuu siirtämällä alkuosassa kirjoitusta näyttämäni kaksi data riviä sisältävän tiedosto sinne. Sen jälkeen vain odotetaan 3 min (huom. FTP laskee täysiä minuutteja)

FTP siirto:

AZUREportal Ent Integration and LogicApp create 38 add function app to Logic app TESTI

Pari vinkkiä vielä edelliseen

Debuggailin vielä tätä em. logic appsia ja huomasin että jos tulee tarve jostakin syystä tarkistaa tai muuttaa FTP palvelun tunnuksia tai osoitetta, on kätevää katsoa arvot API connection kohdasta tästä samasta resurssi ryhmästä. Eli tässä tapauksessa

blogs-csv-to-email – API Connections

AZUREportal Ent Integration and LogicApp create 39 add function app to Logic app FTP settings

DevOps CI & CD – VSTS

Kun aloitetaan Visual Studio Team Services kanssa käytän jo Git repositorio tässäkin mallissa. Git Repo jonka olen jakanut, on yleiseen käyttöön ja sitä en käytä tässä esimerkissä. Seuravaksi kuitenkin kaikki Logic app koodit on saatava Git repoon jotta build & release voitaisiin automatisoida.    Function app ja itse funktio koodithan jo on versionhallinnassa ja Gitissä, joten nyt puuttuu vain varsinainen Logic App. Siinä onkin sitten hieman eri tarina, koska nyt puhutaankin deploymentista Azure Resurssi ryhmään – tarkemmin sanoen juuri Resource Group deployment.

Käytännössä se mitä todella halutaan deploymenttiin laitetaan nyt omaan repoon Gittiin ja ennen sitä voit köydä kurkistamassa miltä se näyttää kliksuttelemalla https://resources.azure.com . Tässä malliksi näkymä tämän jutun resurssiryhmä.

AZUREportal Ent Integration and LogicApp create 40 DevOps

Se mitä se pitää sisällään ei olekaan jotakin koodia paikallisessa kehityskoneessa ja/tai versionhallinnan repositoriossa. Toinen huomioni oli (ensin) se, että sen saaminen ei vaadikaan oikeastaan power shell ja muita kikkailuja. Nyt koko prosessin voi tehdä suoraan Azure saitilta lataamalla exportin ulos sellaisenaan parametreineen. Kätevää! Mutta tämä ei käytännössä toimikkaan kun delivery automatisoidaan loppuun saakka. Ei ainakaan tässä tapauksessa…Ei se silti kovin kaukana kätevästä ole, kunhan olet tullut tutuksi template  creatorin kanssa ja bildaat sen omalla koneellasi. (alla linkissä on myös ohjeet)

Kuitenkin… melko yksinkertaisesti saa exportin ulos power shellilläkin, kun seuraat ohjeita https://github.com/jeffhollan/LogicAppTemplateCreator
Ja
tyrkkäät menemään tällasen setin komentoja :

Login-AzureRmAccount
Get-LogicAppTemplate -LogicApp blogs-csv-to-email -ResourceGroup ServerlessForBlogs -SubscriptionId 86db547a-oman-azure-subscriptionin-id-4496-8460-0a7213575091 –TenantName omantenantinnimi.onmicrosoft.com  | Out-File C:\src\Azure-logicApp-template.json
Get-ParameterTemplate -TemplateFile C:\src\Azure-logicApp-template.json | Out-File C:\src\paramfile.json
Get-ParameterTemplate -TemplateFile C:\src\Azure-logicApp-template.json -KeyVault Static | Out-File C:\src\KeyVault.json

Tai kliksuttele Resurssiryhmään ja valitse sen bladesta Automation Script + Download.

Se mitä saat ‘ulos’ sisältää deployment templaten ja parametri jsonit. Ne laitamme Git repoon versionhallintaan, jotta voimme automatisoita deploymenttiin saakka kun jotakin näissä muutetaan ja commitoidaan Gitiin.Commit toimii build & releasen triggerinä joka vahvistetaan email ilmoituksella VSTS:n toimesta.

Huom ! kokeile myös http://armviz.io/designer

VSTS – Valmistelut

Jos et ole jo niin tehnyt, luo VSTS Tiimi projekti. Tee se omaan tai käytössä olevaan tenanttiisi. Tässä mallissa käytän omaa tenanttiani joka on arvosoft.visualstudio.com. Voi t myös otaa kopion julkisesta Gitistäni, jonka osoite on tuolla aiempana mainittuna.

Tässä stepit Tiimi projektin tekemiseen ja ensimäisen repon luomiseen Azure Function Appeille. Toinen repo tulee Azure Logic App resurssiryhmän deploymentille.

Step 1 – Luo uusi

AZUREportal Ent Integration and LogicApp create 43 DevOps

Step 2 – Nimeä se esimerkiksi resurssiryhmän nimellä kuten kunnon demo friikki…

AZUREportal Ent Integration and LogicApp create 44 DevOps

Step 3 – lopulta valmiina tällainen

AZUREportal Ent Integration and LogicApp create 45 DevOps

Seuraavaan vaiheeseen löytyy monia tapoja ja varmasti kätevämpiä kun tässä nyt näytän, mutta tällä tavoin voi visuaalisesti hyödyntää Visual Studio Git integraatiota.

Klikkaa mukaan readme & Gitnore. Kloonaamme tämän jälkeen vuoronperään molemmat git repot tyhjinä omalle koneelle.

AZUREportal Ent Integration and LogicApp create 46 DevOps

Uuden Git repon teko:

AZUREportal Ent Integration and LogicApp create 47 DevOps

AZUREportal Ent Integration and LogicApp create 48 DevOps

ja

AZUREportal Ent Integration and LogicApp create 49 DevOps

Ja sitten kloonataan (in Visual Studio IDE) nämä omalle koneelle. tein itse polun joka on C:\src\ServerlessForBlogs\LogicApps, jonka jälkeen sen sisällön tulee näyttää tältä:

AZUREportal Ent Integration and LogicApp create 50 DevOps

AZUREportal Ent Integration and LogicApp create 51 DevOps

Eli tyhjää täynnä, paitsi valitsemamme Git failit. Nyt on koodien vuoro. Koodeista LogicApp resurssiryhmän skriptit ovat jo valmiiksi exportattuna omalle koneelle, joten avaan file exlorerin kaksi ikkunaa joissa on exportattu hakemisto (unzipattuna) ja git hakemisto (visual studio).

AZUREportal Ent Integration and LogicApp create 52 DevOps

ja funktiot teen niin että luon uuden visual studio solutionin ja kopioin Azureen jo tehtyjen funktioiden koodit sille.

AZUREportal Ent Integration and LogicApp create 53 DevOps

Huom. Älä luo Git repoa, koska se on jo tehty kloonaamalla

Sen jälkeen se näyttää tältä: (paremmin organisoituna hieman alempana)

Funktio CSV-to-JSON VSTS (ja VSTS JSON-to-Email)ja Visual Studio IDE

AZUREportal Ent Integration and LogicApp create 54 DevOps

AZUREportal Ent Integration and LogicApp create 55 DevOps

ja koodi:

AZUREportal Ent Integration and LogicApp create 56 DevOps

Funktio JSON-to-Email VSTS ja Visual Studio IDE

AZUREportal Ent Integration and LogicApp create 58 DevOps

AZUREportal Ent Integration and LogicApp create 59 DevOps

Tee commit ja sync molemmille. tarkista että VSTS repositoreihin tuli myös koodit. Seuraavana vuorossa on DevOps…

Deployment repo josta saa mallikoodit on https://github.com/arvopaukkunen/serverless-tutorial-deployment1

Azure Resource Group Deployment

Tein power shell komennoilla (yllä aiemmin) JSON failit Azure resource group templaten jossa on kaikki tähän projektiin liittyvät kilkuttimen mukana. Kopioin ne Visual Studio projektiini ja synkkasin Git repoon VSTS tiimiprojektiini.

Se näyttää nyt tältä:

AZUREportal Ent Integration and LogicApp create 64 add function app to Logic app deployment

Korvasin Visual Studio Azure resource group projekti templaten luomat JSON failit jotka olivat tietty tyhjää täynnä olevat geneeriset jasonit.

Nyt kun avaan LogicApp.json failin solution explorerista hiiren oikealla, voin valita edit in designer ja – editori on saman näköinen kun Azure portaalissakin.

Tarkista deployment parametrit

Avaa deployment klikkaamalla hiiren oikealla ja valitse deployment:

AZUREportal Ent Integration and LogicApp create 62 add function app to Logic app deployment

Varmista että parametrit ovat oikein. Voit myös muuttaa deploymentin resource grouppia ja / tai lokaatiota ihan mihin tagansa. Deploymet voi siis myös kloonata jo olemassa olevan toiseen paikkaa ja toisen nimiseksi.

AZUREportal Ent Integration and LogicApp create 65 add function app to Logic app deployment

ja parametrit:

AZUREportal Ent Integration and LogicApp create 63 add function app to Logic app deployment

Älä kuitenkaan tee deploymenttia vielä, varmista vain että parametrit ovat oikein.

Tämä sen takia, että siitä puuttuu vielä erittäin oleellinen osa end to end deployment prosessia (pipeline). Se on Azure funktiot jotka teimme ensimmäiseksi.

Nyt on aika lisätä ne paikalleen.

Azure Funktio mukaan resource group deploymenttiin

Avaa https://github.com/Azure/azure-quickstart-templates/blob/master/101-function-app-create-dynamic/azuredeploy.json

Valitaan siitä tarvittavat osat omaan projektiin ja deploymenttiin:

AZUREportal Ent Integration and LogicApp create 66 add function app to Logic app deployment

Ja sen pitäisi näyttää Visual studio projektin LogicApp.JSON issa tältä:

AZUREportal Ent Integration and LogicApp create 67 add function app to Logic app deployment

AZUREportal Ent Integration and LogicApp create 68 add function app to Logic app deployment

Muuttujat…

AZUREportal Ent Integration and LogicApp create 69 add function app to Logic app deployment

Ja lopuksi resurssit…

AZUREportal Ent Integration and LogicApp create 70 add function app to Logic app deployment

Aina alas asti …

AZUREportal Ent Integration and LogicApp create 71 add function app to Logic app deployment

Ja viimein, parin yrityksen jälkeen ja sulkumerkki virheiden korjaamisen jälkeen pääsin tarkistamaan JSON outliner toiminnolla JSON oikeellisuuden näin:

AZUREportal Ent Integration and LogicApp create 72 add function app to Logic app deployment

Enää puuttuu vain viittaukset ja varmistus että funktiokoodit ovat ajantasalla. Sen jälkeen tässä on valmis ’end to end’ LogicApp & FunctionApps deployment ‘paketti’

CI & CD

     

Esimerkin koodit on kloonattavissa täältä (sama linkki oli yllä aiemmin):

https://github.com/arvopaukkunen/serverless-tutorial-functions1

Kopioi source control osa

https://github.com/Azure/azure-quickstart-templates/tree/master/201-web-app-github-deploy

Kun JSON outliner Visual Studio IDS : ssä näyttää tuossa kun yllä, puuttuu viellä sourcecontrols resurssi. Se on varsinainen juju kokohommassa ja määrää resurssi ryhmä deploymentin hakemaan koodit Git reposta ja varmistaa että logic app sisältää myös function appin.

Depends on haluaa sitenamen sijaan functionapp nimen:

"resources": [
{
"apiVersion": "2015-08-01",
"name": "web",
"type": "sourcecontrols",
"dependsOn": [
"[resourceId(’Microsoft.Web/Sites’, parameters(’siteName’))]"
],
"properties": {
"RepoUrl": "[parameters(’repoURL’)]",
"branch": "[parameters(’branch’)]",
"IsManualIntegration": true

Korvaa yllä oleva
"[resourceId(’Microsoft.Web/Sites’, parameters(’siteName’))]"
Tällä
"[resourceId(’Microsoft.Web/Sites’, variables(’functionAppName’))]"

Nyt ollaan jo siinä vaiheessa että voidaan varmistaa VSTS CD ja CI on konfiguroitu oikein.

[tähän kuva CD stä]

[tähän kuva CI stä]

MS Masterdataa suomeksi

Konseptin määrityksiä

Yritän vääntää suomenkielelle monille jo tutut masterdatan määritelmät. Hieman huvitti käännöstä tehdessänikin, mutta kyllä siitä minusta ihan ymmärrettävää tuli. Tosin ei se ihan ysinkertaiselta heti kuulosta.

 

MDS Mallinnus Konseptina (=suunnitelma, ohjattu tai rajoitettu malli toimia tai toteuttaa)

Masterdata services on joukko suhteellisen yksinkertaisia konsepteja. Nämä konseptit muodostavat data joukkoja (Containers) ja palveluja jotka on käytettävissä ja esillä MDS järjestelmässä. Nämä konseptit on helppoja ymmärtää sellaisenaan. Konseptien tukemat vaihtelevat ja monimutkaiset skeemat muodostaa kummatkin – monimutkaisuuden ja tehon joka MDS järjestelmässä on. Ennen mallin objektien toteuttamista, on syytä käydä läpi niiden määritykset.

Mallit (Models)

Organisaation korkein taso MDS:ssä. Mallit eivät ole muuta kun toisistaan riippuvaisia entiteettejä. Vain entiteeteillä samassa mallissa voi olla riippuvuus suhteita keskenään.

Entiteetit (Entities)

MDS:n perus kokoelmat datasta. Yksinkertaisimmillaan, entiteetit voidaan ajatella olevan kuten tietokannassa taulut. Käyttäjät kontrolloivat atribuutteja (sarakkeet/columns) jotka hallitaan jokaisen entiteetin avulla. Jos Eksplisiittisesti (yksityiskohtaisesti/selvästi) määritellyt hierarkiat ovat käytössä entiteetissä, muostuvat nämä entiteetit huomattavasti monimutkaisemmaksi. Se ilmenee isäntä jäsenissä ja niiden konsolidoiduissa jäsenissä niin kuin myös niiden ryhmittelyissä (collections)

Jäsenet (Members )

Tallennetuja tietoja joilla entiteetit on täytetty. Ne voivat olla joko päätason (leaf) tai konsolidoituja jäseniä. Päätason – leaf jäsenet ovat primääri jäseniä entiteetissä. Jos entiteetillä on käytössä eksplisiittiset hierarkiat ja ryhmittelyt, voidaan luoda konsodoituja jäseniä ja niille omia attribuutteja.

Attribuutit (Attributes)

Kuvaavat jäseniä. Karkeasti ajatellen ne voidaan ajatella olevan tietokantataulun kenttiä. Entiteetit pitävät sisällään jäseniä ja niiden attribuutti arvoja. Attribuutit voivat olla joko vapaamuotoisia tai domain rajoitteisia.

Domain attribuutit (Domain-based attributes)

Attribuutit joiden sisältämät arvot on rajattu jäseniin jotka ovat liitetty tietystä entiteetistä.

Hierarkiat (Hierachies)

Konsolidoituja tai jäsenten ryhmittelyjä joita käytetään apuna raportoinnissa ja analysoinneissa. On olemassa kaksi hallintatapaa, eksplisiittinen ja periytetty. Hierarkiat tuottavat tai varmistavat lopputuloksen jossa arvoja ei voida tuplata tai hävitä loppukäyttäjäsovelluksissa.

Ryhmittelyt (Collections)

Tarjoavat mahdollisuuden joustavaan ryhmittelyyn jollaista hierarkiat eivät voi tukea.

PowerBI embedded

Power BI saadaan vihdoin upetettua iFrame :een.

image

Mukava ominaisuus tuotiin julki build tapahtumassa jokin aikaa sitten.

Tässä lyhyt yhteenveto kuinka se tehdään

Tarvitset PowerBI raportin, AZURE tilin ja Visual Studio 2015, sekä roppakaupalla kärsivällisyyttä nugettien kanssa, koska kyseessä on preview komponentit.

AZURE:

Tee uusi resurssiryhmä. Huomaa että vain South Central US on tarjolla tässä preview versiossa.

image

Resurssiryhmään tulee tehdä uusi PowerBI työtila. Valitse – New – Marketplace / Data + Analytics / PowerBI Embedded

image

Täytä tarvittavat tiedot työtilan luomiseksi ja valitse alereunasta ‘Create’

image

Pin to dashboard ei ole ollenkaan huono idea. Tosin jos demoilet paljon – voi niitä tulla sitten hieman liikaakin – mutta pysyypähän muistissa Smile

Ja sitten se näyttääkin tältä.

imageimage

Tässä vaiheessa voitkin ottaa talteen tiedot, jotka on tarpeen varsinaisen raportin upotuksessa apuohjelman työtilan ja sen raportin provisiointia varten.

image

’Access keys’ osa löytyy nyt oikeanpuolimmaisena näytölläsi. valitse ‘copy’ settings kohdasta ja liitä sen key 1 muistiinpanoihisi. Samoin Työtilan teossa kirjoitamasi muutkin tiedot. Tarvitset niitä provisiointiin tehdtyyn apuohjelmaan, jonka voi ladata täältä. https://github.com/Azure-Samples/power-bi-embedded-integrate-report-into-web-app/

Microsoftin toimittama aluperäinen artikkeli löytyy täältä:

https://azure.microsoft.com/nl-nl/documentation/articles/power-bi-embedded-get-started-sample/

TIEDOT MUISTIIN:

Key 1 (esimerkki)

UJHmCRNPc0fcx7vi70nUo++Ghh4H0t+2Di2dKWJW2Eg/F5Erggy70vjwQ5J69bRCUM7xk1fZ0lHL3S7T+vqNCA=

– Subscriptionid (esimerkki)

397ec54d-XXXXX-41fe-XXX-06655b6xxxxx

– Workspace Collection name

ArvoPowerBI2

– Workspace ID (esimerkki)

9d453247-36fd-4bdf-ba0c-d05526920614

– PowerBI raportti faili

E:\Users\Arvo Paukkunen\OneDrive\Downloads\PowerBi\Retail Analysis Sample.pbix

DEMO – video

Visual Studio

 

Tutkin malleja ja ratkaisuja jonkin verran ja vietin lopulta suurimman osan ajasta nugettien säätämisessä. Aloitan siksi tässä siitä. Taivottavasti tämä nopeuttaa turhattavinta osaa tästä ja pääset nopeammin toisi toimiin Smile .

Esimerkki ohjemassa tuntui kaikki olevan kohdillaan, joten kokeillessani erästä toista, tuli nuo ongelmat eteen. Tässä malli joka toimi lopulta minulla:

Lataa ja avaa tämä visual studio MVC projekti MyPowerBI

https://onedrive.live.com/redir?resid=AB6378142A6498FC!670777&authkey=!AKgIdWy0JKiP33k&ithint=file%2czip

 

Ensimmäisenä temppuna varmista että oikeat nugetit on mukana. Itse jouduin lataamaan kaikki yksitellen ja kokeilemaan missä vaiheessa virheet loppuivat. Alinna löytyy ’tältä se näyttää’ kuva siitä kun oikeat nugetit on tämän päivän powerbi embedded version kanssam sulassa sovussa. Tämän kuvasarja kertoo maanläheisen tavan varmistaa että saatavilla olevat, asennetut ja päivityksiä saatavilla versiot ei aiheuta liiemmin päänvaivaa

Vaihe 1 – ilman prerelease versioita (browse – saatavilla)

image

ilman prerelease versioita (installed – asennettavat tässä versiossa Smile)

image

Prerelease versioiden kanssa

image

image

Asennetut – ei erikseen pre versiota

image

En päivittänyt mitään noista. päivitys voi tietty tulla kyseeseen, mutta sen näet buildin jälkeen.

Muutokset itse koodiin on vain:

web.config failiin:

<appSettings>
<add key=”webpages:Version” value=”3.0.0.0″ />
<add key=”webpages:Enabled” value=”false” />
<add key=”ClientValidationEnabled” value=”true” />
<add key=”UnobtrusiveJavaScriptEnabled” value=”true” />
<add key=”powerbi:AccessKey” value=”xxxxxxxxxxxxxxxxxxxx” />
<add key=”powerbi:ApiUrl” value=”https://api.powerbi.com” />
<add key=”powerbi:WorkspaceCollection” value=”NimiNimiNimiNimi” />
<add key=”powerbi:WorkspaceId” value=”xxxxxxxxxxxxxxxxx” />
</appSettings>

Kun ongelmia ei näy ja yllä olevat parametrin on syötetty, voit ajaa uuden MVC asp.net sovelluksen ja alkaa protoilla miten iFrame voitaisiin liittää omaan ohjelmaasi.

 
DEMO – video:

Kommentoi ja anna palautetta. Minut saa kiinni myös Bilot Oy mailista.

AZURE varmistukset

Tein Azure ympäristööni parannuksia muuttamalla domain kontrollerin Server coreksi, että saisin sen vieläkin edullisemmin ja säästäisin virtuaali- rautaa. Tätä tehdessäni tuli mieleen että, miten saisin kätevästi tehtyä varmuuskopion – jos core muutoksessa menisikin jotain pieleen tai haluaisin palauttaa käyttöliittymällinen domain kontrollerin nopeasti – ilman käyttökatkoa…tai edes lähes Smile

Tässä testattuna ja hyväksi todettuna. Tässä siis suomennettuna ja testattuna. Ole varovainen palautuksen kanssa. Virtuaalikone todellakin tuhotaan operaation aikana. Sen palauttaminen keskeytyneen skriptin tms. jälkeen voi olla haasteellista… Onnistuin itse välillä kaatamaan palautuksen kun data levyjä oli useampia. Palauttelin tällaisen jälkeen vm:n Azure Management Studiolla (http://www.cerebrata.com/products/azure-management-studio/introduction)

Ensinnäkin en alkanut ensin lisäämään automaatiota, vaan tein yhden Azure virtuaalikoneen kerrallaan. Nyt käytän varmistuksiin ja palautuksiin ‘manuaalisesti’ koneen mukaan nimettyjä PowerShell skriptejä.

Varmuuskopiointi koostuu seuraavista vaiheista:

  • Olettamukset ja valmistelut
  • Valitse virtuaalikone joka kopioidaan
  • Identifioi jokainen virtuaali- levy
  • Luo storage container varmistuksen tallennukseen
  • Varmuuskopio virtuaali koneet cloud storageen Windows Azuressa.

Aluksi tarvitaan ‘olettamukset ja alustus’

Lokitus omaan paikalliseen hakemistoon ja muuttama muu juttu…

image

Jos sinulla sattuu olemaan useita Azure tilauksia (subscriptions) ja haluat jonkin käsittelyyn jonkin muun kun nykyisen online profiiliisi linkatun tilauksen. Varmista seuraavalla skriptillä oikea kohde. Minulla esimerkiksi on arvosoft@hotmail.com vain protoiluun ja muutamia muita Microsoft tilejä eri asiakas ja kehitys projekteihin.

Muussa tapauksessa vain sertit import ja azure on autentikoitu…

image

image

image

Get-AzureVM tekee listan virtuaalikoneista tässä tilauksessa ja nyt autentikoidulla sertifikaatilla. Alla olevassa kuvassa on kaikki koneet pois päältä ja silloin niitä ei voida käsitellä. Ainakin käsiteltävä kone on oltava päällä ja provisoituna normaalisti. Skiripti sammuttaa sen , mutta jättää tilaan ready (allokoitu)

image

Kun domain kontroller virtual kone on käynnissä näyttää Get-AzureVM tulos tältä:

image

Valitse virtuaali- kone, joka varmistetaan

Kone voidaan valita cmdletillä Get-AzureVM. Kun ajat sen ilman sellaisenaan, saat listan provisioiduista virtuaalikoneistasi. Talleta haluttu virtuaalikone $vm muuttujaan ja pysäytä se jättäen se provisioituun tilaan.

image

Varmistus, että virtuaalikone on oikeassa tilassa:

image

Paikallista ja tunnista tarvittavat OS ja Data levyt

OS levyjä on vain yksi, mutta data levyjä voi tietysti olla useampia. Ne haetaan omiin muuttujiinsa ja Data levyt ovat ‘collection’ ja ne pitää luupata läpi.

Luodaan storage container käyttämällä medial link ominaisuutta.

image

Ja vielä varmistus, että storage luotiin oikein. Sen voi tietenkin kurkata myös muilla työkaluilla tai azure web hallinta saitilla.

Tässä power shell ja saitti:

image

image

Nyt on kaikki valmista varsinaisen varmistuksen tekoon. Ensin muutama variaabeli Blob käyttöön ja sitten menoksi…

image

Yllä muuttujan ja varmistus, että ne on muodostettu oikein.

image

On hyvä huomioida, että kopiointi on asynkroninen ja se toteutetaan taustalla. CopyState:lla voidaan varmistaa edistymisen tila.

Enää jäljellä onkin data levyjen varmistuskopiointi, joka toteutetaan luuppaalla kaikki läpi.

Tässä tapauksessa, koska muita levyjä ei ollut lopputulos näyttää tältä:

image

Varmistuksen palauttaminen

Ehkä tärkeämpi osuus tässä on edellisen osan varmistusten palauttaminen. Tässä sen vaiheet:

  • Valitse palautettava virtuaalikone
  • Paikanna ja identifioi jokainen virtuaalilevy joka palautetaan
  • De-provisio virtuaali kone palautettavaksi
  • Palauta virtuaalikoneen käyttöjärjestelmälevy (OS Disk)
  • Palauta virtuaalikoneen muut levyt, jos sellaisia on.  
  • Uudelleen provisioi virtuaalikone

    Valitse palautettava virtuaalikone

    Edellisen osan varmistuskopioitu virtuaalikone voidaan valita komennolla Get-AzureVM. Ilman parametreja sellaisenaan suoritettuna se palauttaa listan virtuaalikoneista jotka ovat provisioitu – käytettävissä tällä hetkellä.

    Get-AzureVM

    image

    Tietyn virtuaalikoneen valinta tehdään laittamalla  ServiceName ja Name arvot parametreiksi ja ohjaamalla tulos uuteen variaabeliin.

    $vm = Get-AzureVM -ServiceName ArvoLab-ARVOSOFT -Name ARVOSOFTDC

    Tämän jälkeen valittuun virtuaalikoneeseen voidaan viitata variaabelilla $vm.

    Samaan tapaan kun edellisissä osassa, on virtuaalikone oltava samutettuna, mutta provisioituneena. Se kuitenkin käynnistetään lopuksi erillisellä komennolla aivan viimeisenä.

    $vm | Stop-AzureVM –StayProvisioned

    image

    Kun kone on oikeassa tilassa, voidaan edetä seuraavaan aiheeseen, jossa paikallistetaan ja identifioidaan virtuaalikoneen kaikki virtuaali levyt jotka halutaan palauttaa.

    Paikanna ja identifioi jokainen virtuaalilevy joka halutaan palauttaa

    Käyttöjärjestelmälevyn sijainti haetaan tallennusta varten komennolla Get-AzureOSDisk .

    $vmOSDisk = $vm | Get-AzureOSDisk

    Kaikilla virtuaalilevyillä on kaksi ominaisuutta jotka ovat tarpeen varmistuksissa ja palautuksissa. nämä ovat DiskName ja MediaLink arvot jotka näkyy kuvassa alla. Näillä tiedoilla saamme kunkin virtuaalikoneen kaikki levyt varmuuskopioitua ja palautettua.

     image
    Common Property Values for a Windows Azure Virtual Hard Disk

    Muiden kun käyttöjärjestelmä levyjen vastaavat toimenpiteet (sijainti) tehdään komennolla Get-AzureDataDisk. Koska virtuaalikoneilla voi olla useita levyjä tuloksena palautuu tietojoukko (collection of DataVirtualHardDisks).

    $vmDataDisks = $vm | Get-AzureDataDiskimage

  • De-provisioi virtuaalikone palautettavaksi

    Provisioidut virtuaalikoneet pitävät kirjaa levyistään – ja muista ominaisuuksistaan – ettei ne ole vahingossa tai epähuomiossa poistettu tms. Tämän takia virtuaalikoneen konfiguraatio on varmistettava kopioimalla se talteen paikalliselle levylle ensin ja sitten kyseinen virtuaalikone ‘tuhotaan’ uuden palautettavan koneen tieltä. Tämä on kuitenkin onneksi yksinkertaisesti tehtävissä vain muutamalla lisärivillä PowerShell koodia.

    Ensin, Luodaan uusi paikallinen kansio XML failia varten. Virtuaalikoneen konfiguraatio xml tallennetaan tänne palautuksen ajaksi.

    $exportFolder = "C:\ExportVMs"

    if (!(Test-Path -Path $exportFolder)) {

                New-Item -Path $exportFolder -ItemType Directory

            }

    image

    Ja tänne kopiodaan XML faili jota käytämme palautusprosessin loppuvaiheessa re-provisioinnissa.

    $exportPath = $exportFolder + "\" + $vm.Name + ".xml"

    $vm | Export-AzureVM -Path $exportPath

    image

    Kun kopiointi on varmasti tehty voidaan suorittaa Remove-AzureVM komento jolla virtuaalikone poistetaan/tuhotaan palautuksen valmistelutoimenpiteenä.

  • image

    Remove-AzureVM -ServiceName $vm.ServiceName -Name $vm.Name

    Restore Windows Azure VM OS Disk

    Tässä vielä muutama variaabeli palautuksen onnistumiseksi.

    $vmOSDiskName = $vmOSDisk.DiskName

    $vmOSDiskuris = $vmOSDisk.MediaLink

    $StorageAccountName = $vmOSDiskuris.Host.Split(’.’)[0]

    $vmOSBlobName = $vmOSDiskuris.Segments[-1]

    $vmOSOrigContainerName = $vmOSDiskuris.Segments[-2].Split(’/’)[0]

    $backupContainerName = “backups”

    Koska virtuaalikoneen poiston jälkeen on usein levyissä tieto niiden liitoksesta tiettyy virtuaalikoneeseen, on tässä hyvä odottaa hetki suorittamalla while loop tarkistamaan liitoksen poistuminen.

    While ( (Get-AzureDisk -DiskName $vmOSDiskName).AttachedTo ) { Start-Sleep 5 }

  • image

    Sen jälkeen poistaminen onnistuu.

    Remove-AzureDisk -DiskName $vmOSDiskName –DeleteVHD

  • image

    Poiston jälkeen palautus voidaan suorittaa komennoilla Start-AzureStorageBlobCopy ja Get-AzureStorageBlobCopyState :

    Start-AzureStorageBlobCopy -SrcContainer $backupContainerName -SrcBlob $vmOSBlobName -DestContainer $vmOSOrigContainerName –Force

  • image

    Get-AzureStorageBlobCopyState -Container $vmOSOrigContainerName -Blob $vmOSBlobName –WaitForComplete

  • image

    Add-AzureDisk -DiskName $vmOSDiskName -MediaLocation $vmOSDiskuris.AbsoluteUri -OS Windows

  • image

    Tähän loppuu käyttöjärjestelmälevyn palautus prosessi.

    Palauta virtuaalikoneen muut mahdolliset levyt

    Koska levyjä voi olla useita, käytetään tässä for each looppia läpikäyntiin

    ForEach ( $vmDataDisk in $vmDataDisks ) {

            $vmDataDiskName = $vmDataDisk.DiskName

            $vmDataDiskuris = $vmDataDisk.MediaLink

            $vmDataBlobName = $vmDataDiskuris.Segments[-1]

            $vmDataOrigContainerName = $vmDataDiskuris.Segments[-2].Split(’/’)[0]

            While ( (Get-AzureDisk -DiskName $vmDataDiskName).AttachedTo ) { Start-Sleep 5 }

            Remove-AzureDisk -DiskName $vmDataDiskName –DeleteVHD

            Start-AzureStorageBlobCopy -SrcContainer $backupContainerName -SrcBlob $vmDataBlobName -DestContainer $vmDataOrigContainerName –Force

            Get-AzureStorageBlobCopyState -Container $vmDataOrigContainerName -Blob $vmDataBlobName –WaitForComplete

            Add-AzureDisk -DiskName $vmDataDiskName -MediaLocation $vmDataDiskuris.AbsoluteUri

        }

    Tämän jälkeen kaikki levyt ovat valmiina ja virtuaalikone voidaan provisioida.

    Uudelleen provisio virtuaalikone

    Tähän käytetään Import-AzureVM komentoa. Uudelleen provisioinnin jälkeen virtuaalikoneen tiedot ovat liitetty palautettuun kopioon koneesta alussa tallennetun XML konfiguraatiotiedoston mukaan.

    Import-AzureVM -Path $exportPath | New-AzureVM -ServiceName $vm.ServiceName -VNetName "InSpeed-network"

    Siinäpä se!.

Kiitokset / Special thanks for excellent article beleongs to Keith Mayer

Tämän inspiraationa löytyy alkuperäinen Keith Mayerin ratkaisu hänen blogista:

http://blogs.technet.com/b/heyscriptingguy/archive/2014/01/24/create-backups-of-virtual-machines-in-windows-azure-by-using-powershell.aspx

VMWare konversio Hyper-v :ksi

Etsin jonkin aikaa joustavaa tapaa kovertoia VMWare virtuaalikoneeni Winows 7 koneeltani Windows 8 koneen uuteen ympäristööni, jonka juuri päivitin Windows 8 : ksi.

Windows 8 tuo mukanaan 64 bit Hyper-v virtualisoinnin, joten en enää tarvitse VMWarea labra koneitani varten. Winows 7 koneessa, kun oli vain 32 bit virtualisointi ja se ei riitä esim. 5 koneen sharepoint farmiin, jossa on SQL 08/2012 kannat sekä ORACLE 11 ja essbase ym.

Ensin sopivaa työkalua ei tuntunut löytyvän millään ja kaikki tuntuivat olevan liian pitkälle vietyjä ratkaisuja ja tarkoitettuja oikeaan tuotantoympäristöön – läppärillä pyörivän labra ympäristön sijaan.

Lopulta löysin sysinternals työkalun nimeltä Disk2vhd v. 1.63. Sillä homma käy todella napakasti ja virtuaalikoneet jopa vievät nyt vähemmän tilaa kun VMWare versiot. Tosin tilan muutos taisi tulla snapshottien poistamisesta…

image

Työkalu on tarkoitettu fyysisen koneen muuntamiseen virtuaaliseksi. Hyvä juttu oli se, että käynnistin sen VMWare virtuaalikoneessa ja ohjelma muuttaa kiltisti sen siitä Hyper-v koneeksi – ihan kun VMWare olisi fyysinen kone. Sitähän juuri hainkin.

Alun hankaluutena on kuitenkin se, että VMWare ei voi olla samalla koneella Hyper-v asennuksen kanssa. Siitä pääsee ohi yksinkertaisesti poistamalla hyper-v ja sen jälkeen käynnistämällä tarvittavat VMWare koneet yksi toisensa perään ja kopsaamaalla Disk2vhd ko. koneella ja suorittamalla se niin että uusi VH faili tulee ulkoiselle kovalevylle – jos läppärin levylle ei mahdu.

Käytännössä installoin ensin heper-v n testatakseni sitä, mutta huomasi pian että saaakseni VMWaren toimimaan – se tuli poistaa. Kokeilin näin yhden virtuaali koneen ja testasin konversion. Sitten poistin hyper-v n ja konvertoin kaikki loput koneeni – noin 200 Gigaa. Sitten asensin hyper-v n takaisin ja otin sen käyttöön sekä poistin VMWaren.

Tämä vei aikaa muutaman päivän verran – joulun pyhien aikana…

Tässä muutama aiheeseen liittyvä linkki:

http://technet.microsoft.com/en-US/sysinternals

http://simon.rozman.si/computers/virtual/copy-physical2vhd

http://www.jaylee.org/page/Hyper-V-Virtual-Machine-Mover.aspx

http://www.jaylee.org/post/2008/10/How-to-convert-a-big-VMWare-VMDK-into-an-Hyper-V-VHD.aspx

http://4sysops.com/archives/free-vmdk2vhd-convert-vmware-vmdk-to-hyper-v-vhd/

http://www.aaronpalermo.com/wordpress/archives/32

http://live.sysinternals.com/

Microsoft solution accelerator

Muuten hyvä tuotos, mutta esimerkiksi minun tapauksessa käytössä on vain Vmware player imaget tai Vmware desktop – ei esx tms serverituotetta. Silloin vain yllä oleva esimerkki toimii ei tuo muuten niin hyvä solution accelerator

image

En viellä kerinnyt kokeilla cmd line käyttöä, joka on lupaavan oloinen dokumentaation  puolesta (voisi ehkä toimiakkin):

MVDC.exe ’.\VMDK\Test.vmdk’ ’.\vhd\Test.vhd’

Windows 8 tuoteavaimen vaihto ja aktivointi

Paina Windows + R
Kirjoita slui 3
Klikkaa OK (tai paina enter)
Kirjoita tuoteavain ja klikkaa Activate

Windows login screen kuvan vaihtaminen

Muuten ok, mutta allaoleva ei ihan toiminut… laitan tähän postaukseen lisäinfoa, kun keksin miksi online profiilillani tämä ei toiminutkaan niin kuin odotin… Löytyi ja olihan se paljon helpompaa kun eräs twiikkaus saitti ehotteli – ja paljon – ei ollenkaan niin hieno, koska ei tarvinnut enää itse keksiä mitään – se oli jo tehty Smile – niin kuin ennenkn. Tutkin hieman sitä twiikkaus saittia ja sitä toimiiko siellä mikään…

Selitys löytyy painamalla windows painikella ja kirjainta I (ilmari) ja navigoi itsesi asetusten personalisointiin. kuva tuolla alla…

Aina sitä pitää päästä twiikkaamaan uutta käyttistä Smile tässä kikka joka ei ole vaikea löytää hakukoneillakaan ja ilman tätä eitietenkään voi tehdä duunia ?

Avaa windows haku

image

ja kirjoita siihen gpedit.msc – ja paina enter.

image

image

Avaa sovellus ja navigoi alla olevan mallin mukaan editointi ikkunaan:

image

Tuplaklikkaa valittu rivi ja editoi tiedot seuraavan mallin mukaan – laita haluamasi kuva ja homma on tehty.

 

Tällä muokkaus onnistui paremmin:

image

Ja sitten:

Muuta Logout Screen for all Accounts
  1. Metro näytöllä kirjoita run ja paina enteriä.

  2. Kirjoita sitten gpedit.msc tekstilaatikkoon ja paina OK

  3. Navigoi Computer Configuration -> Administrative Templates -> System -> Logon

  4. Enable the policy “Always use custom logon background"

DB2 data SQL server kantaan

Tuli eteen tilanne, jossa asiakas tarvitsee kertaluontoisen datan siiron DB2 kannasta AS400 koneelta Windows koneelle SQL Server 2008R2 kantaan. Ja luonnollisesti kertaluontoisuus tarkoittaa, että homma pitää pystyä toistamaan, mutta ei automatisoimaan – kuten ETL prosessit.

Esittelen yhden ratkaisun, joka löytyy varmasti muualtakin verkon blogi saiteilta – kuten Michelle Gutzait blogeissa linkatuista server konfiguraatioista http://www.mssqltips.com/sqlserverauthor/32/michelle-gutzait/

Lisäykseni on Michellen ratkaisuun muutos schema tiedon lisäämiseksi luotaviin tauluihin. Tällä tosin on merkistystä lähinnä SQL servereiden välillä tehtävästä siirrosta tai muiden kantojen välillä, jos halutaan määrittää schemat sql server puolella.

Ongelma joka pitäisi vielä ratkaista, on XML datan tuki tai kunnollinen virheenkorjaus, joka ohittaa mm. XML kentän kohdalla tulevan virheen ja raportoi siitä – ja jatkaa…

Linkatun Serverin tekeminen SQL servereiden välillä

image

AP1 koneen SQL server default instanssin Linked Server AP2 Adventure Works kantaan.

image

SQL servereiden välillä konfigurointi on todella suoraviivaista. Labraympäristössä voidaan vielä käyttää admin tunnuksia, joten security välilehden tunnus asetuksiinkaan eitarvitse koskea. Oikeassa ympäristössä security on yleensä asetettava tietylle user accountille.

image

Skripti

USE [master]
GO

/****** Object:  LinkedServer [AP2]    Script Date: 6.11.2012 9:58:25 ******/
EXEC master.dbo.sp_addlinkedserver @server = N’AP2′, @srvproduct=N’SQL Server’
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N’AP2′,@useself=N’True’,@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

GO

EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’collation compatible’, @optvalue=N’false’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’data access’, @optvalue=N’true’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’dist’, @optvalue=N’false’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’pub’, @optvalue=N’false’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’rpc’, @optvalue=N’true’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’rpc out’, @optvalue=N’true’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’sub’, @optvalue=N’false’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’connect timeout’, @optvalue=N’0′
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’collation name’, @optvalue=null
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’lazy schema validation’, @optvalue=N’false’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’query timeout’, @optvalue=N’0′
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’use remote collation’, @optvalue=N’true’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’remote proc transaction promotion’, @optvalue=N’true’
GO

Siirtologiikka

Ensin on luotava taulu johon lähdekannan kaikki taulunimet tuodaan. SQL skripti luuppaa taulunimiä tästä taulusta ja luo ja täyttää taulut haluttuun scheemaan kohdekannassa. Tauluista tulee identtiset lähteen kanssa.

Aputaulun luonti

CREATE TABLE [dbo].[tblListOfTables](
[TableName] [varchar](200) NOT NULL,
[TableSchema] [varchar](200) NOT NULL,
[IsEnabled] [bit] NULL,
PRIMARY KEY CLUSTERED
(
[TableName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

ALTER TABLE [dbo].[tblListOfTables] ADD  DEFAULT ((1)) FOR [IsEnabled]
GO

image

Näppärin tapa siirtää data, on ajaa seuraava kysely linkatussa kyselyssä ja ottaa SQL Server management studiosta copy / pastella data talteen.

SQL Kysely:

SELECT TABLE_SCHEMA, TABLE_NAME FROM ap2.AdventureWorks.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN ( SELECT TABLE_NAME FROM ap2.AdventureWorks.INFORMATION_SCHEMA.COLUMNS)

Tulos:

image

Kohdetaulu:

image

muuta editoitavat 200 sellaiseksi että varmasti riittää esim: 2000 a pista tarpeeton enabled kenttä kyselystä.

image

SELECT     TOP (200) TableName, TableSchema, IsEnabled
FROM         tblListOfTables

Aja kysely uudelleen:

image

image

Liitä data:

image

Huomioi, että kenttäjärjestys tulee olla sama lähteessä ja kohteessa!

image

image

toimii muuten, mutta virheenkorjauksen vuoksi siirto loppuu ekaan XML datakenttään. Tämän voi korjata SQL skriptissä.

image

Ja itse SQL skripti on tässä:

Tarvittavat muuttujat:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DECLARE @Loop INT,
@cmd VARCHAR(MAX),
@rc INT,
@TB VARCHAR(130),
@SN VARCHAR(130)

Temppi taulu ja siihen juokseva numerointi kenttä luuppia varten:

SELECT ROWID = IDENTITY(INT,1,1), TableName, TableSchema
INTO #Tables
FROM tblListOfTables
WHERE IsEnabled = 1
ORDER BY TableName

Loopin initialisointi:

SET @rc = @@ROWCOUNT

SET  @Loop = 1

— Looping on table names, dropping and recreating each:
WHILE @Loop <= @rc
BEGIN
SELECT @TB = TableName, @SN = TableSchema FROM #Tables WHERE ROWID = @Loop

SET @cmd = ”

Datan ja taulujen ‘siirto’:

SELECT @cmd = ’IF EXISTS (SELECT 1 FROM sys.objects WHERE Type = ”U”’ +
’AND name = ”’ + @TB  + ”’) DROP TABLE [’ + @TB + ’];’ +
’SELECT * INTO  [’ + @TB  + ’] ’ +
’FROM AP2.[AdventureWorks].[’+ @SN +’].[’ + @TB  + ’]’

EXEC (@cmd)
SET @Loop = @Loop + 1
END

Temppi taulun poisto:

DROP TABLE #Tables
GO

SQL Server ETL konfiguraatio vaihtoehdot

Tässä konfiguraatio vaihtoehdot ja kriteerit päätöksille.

SSIS konfiguraatio vaihtoehdot