3 Dinge, die ich mag

Korrigiert und verbessert

1. Ich mag diesen Becher gern.
Ich habe ihn in Japan gekauft, aber er erinnert mich an europäische Architektur.

2. Ich mag auch Basel gern.
Seit 2015 ist Basel mein Zuhause. Ich habe mich in Basel verliebt. Es ist klein, aber ausreichend. Der Winter ist nicht so streng wie in den Bergen, aber es ist jedes Wochenende möglich, in die Berge zu fahren.

3. Ich mag die Möglichkeit, dass jedes Jahr besser als das letzte sein könnte.

Original

1. Ich mag diesen Becher gern. Ich habe es in Japan gekauft, aber er errinert mich an Europäischen Arkitektur.
2. Ich mag auch Basel gern. Seit 2015 Basel ist zu Hause. Ich habe Basel verliebt. Es it klein, aber genug. Winter ist nicht stark wie die Bergen aber es ist jede Wochenende in den Bergen möglich zu gehen.
3. Ich mag die Möglichkeit, dass jedes Jahr besser als das Letzte könntet sein.

Ich schaffe DAS!

At the end of last year, months after restarting my journey with the German language, I realized that whatever I was doing was not enough. Something’s got to change. First, I told my teacher I was going to take the B1 exam, although I don’t need the certificate. I’ve booked it in April to allow myself a few months to prepare.

I then started consuming more content in German. I listened to an Easy German podcast before Christmas. To my surprise, I could follow the conversations. So I started listening to one episode everyday while I cook breakfast and dinner since then. I couldn’t understand all the words and sentences, but I could understand the context and most of the time meaning of what’s being said. I could also more often pick-up words I’ve heard before which I didn’t know, and when situation allows, I would search for them immediately in the dictionary.

At the beginning of January, they kicked off the Easy German #30daychallenge where the EG team post a question every day that subcribers could respond to. It was a very good exercise to practice thinking and well, writing in German. But there’s another problem, I wanted to learn and be corrected as well. Here comes ChatGPT in the picture. Thanks to the #30daychallenge, I’ve written 26 short paragpraphs almost daily and had ChatGPT corrects every mistake, explain me why and recommends better wording if possible. I thought I’d post some of them here to keep track of my German progress. I’ll post both the original and corrected version to hopefully see some progress one day.

To start with, here’s the longest one I wrote in response to my reflections at the end of January. It took me a whole train ride from Basel to Zürich and a light motion sickness to write this:)

Liebes Tagebuch,

Ich bin so stolz darauf, wie viel ich im Januar geschafft habe. Um mir zu helfen, ein paar meiner Vorsätze zu erreichen, habe ich eine Eselsbrücke entwickelt: Jeden Tag muss ich „ein bisschen DAS“ machen – ein bisschen Deutsch, ein bisschen Arts (Kunst) und ein bisschen Sport.

1) Ein bisschen Deutsch

Fast jeden Tag seit Weihnachten höre ich, während ich Frühstück und Abendessen koche, eine Folge des Easy-German-Podcasts. Dank der #30daychallenge konnte ich das Schreiben auf Deutsch üben. Ich habe es genossen, die Antworten der anderen Mitglieder zu lesen. Um das Sprechen zu üben, habe ich ChatGPT Voice an ein paar Abenden ausprobiert.

Letzte Woche hatte ich eine neue Idee: Jedes Mal, wenn wir uns im Büro sehen, stelle ich einem Kollegen eine kleine Frage auf Deutsch. Wir können dann 5–10 Minuten miteinander sprechen. Einmal haben wir uns sogar mit einem dritten Kollegen über das Laufen unterhalten – für 20 Minuten!

2) Ein bisschen Arts (Kunst)

Für Kunst muss ich leider noch mehr tun, um mein Ziel zu erreichen. Ich möchte nicht nur Kunst oder Fotografie konsumieren, sondern auch selbst kreativ sein. Dafür habe ich mich letzte Woche bei Midjourney angemeldet, aber ich habe es bisher nur einmal benutzt.

3) Ein bisschen Sport

Ich kann kaum glauben, wie viel ich in einem Monat laufen kann, wenn ich mich einmal entschieden habe. Dank eines 10-km-Trainingsplans, den ich im Januar angefangen habe, bin ich schon 86 km insgesamt in einem Monat gelaufen! Zum Vergleich: Im ganzen Jahr 2024 bin ich insgesamt 121 km gelaufen.

Außerdem habe ich letzte Woche an fünf aufeinanderfolgenden Tagen morgens 20–30 Minuten Yoga gemacht.

Ich kann den Rest des Jahres 2025 kaum erwarten! Inspiriert von Angela Merkel, “Ich schaffe DAS!”

ORIGINAL

Ich bin so stolz, wie viel habe ich im Januar geschafft. Um mich helfen ein paar meine Vorsätze zu erreichen, habe ich eine Eselsbrücke entwickelt. Jeden tag muss ich “ein bisschen DAS machen – ein bisschen Deutsch, ein bisschen Arts (Kunst), un ein bisschen Sport.

1) Ein bisschen Deutsch – Fast jeden tag seit Weinachten, während ich Frühstuck und Abendessen koche, höre ich eine Folge des Easy German podcast. Dank die #30daychallenge, konnte ich Schreiben auf Deutsch üben. Ich habe genossen, die Antworte von den andere Mitglieder gelessen. Zu reden zu üben, habe ich ChatGPT voice ausprobiert für ein paar Nachten. Letzte Woche habe ich mich eine neue Idee ausdenken. Jedes mal sehen wir uns ins Büro, befrage ich ein Kollegen eine kleine Frage auf Deutsch. Wir können dann 5-10 minuten reden. Ein mal haben wir uns mit einem dritten Kollegen über Laufen für 20 minuten gesprochen!

2) Ein bisschen Arts (Kunst) – Für Kunst, leider muss ich mehr machen mein Zeil zu erreichen. Ich möchte nicht nur Kunst oder Fotographie konsumieren, sondern auch kreieren. Dafür habe ich Midjourney letzte Woche angemeldet, aber ich habe es nur einmal benutzt.

3) Ein bisschen Sport

Ich kann kaum glauben, wie viel ich in einem Monat laufen kann, wenn ich mich einmal entschieden habe. Dank eines 10-km-Trainingsplans, den ich im Januar angefangen habe, bin ich schon 86 km insgesamt in einem Monat gelaufen! Zum Vergleich: Im ganzen Jahr 2024 bin ich insgesamt 121 km gelaufen.

Außerdem habe ich letzte Woche an fünf aufeinanderfolgenden Tagen morgens 20–30 Minuten Yoga gemacht.

Ich kann den Rest des Jahres 2025 kaum erwarten!

Bologna

We ended up on a long weekend trip to Bologna and Florence in August after many hours of going through possible hut to hut hiking trips and still unable to decide.

Bologna is a chill and cute town 6.5 hours by train from Basel. If you can’t handle heat very well, I would not recommend to go there in the peak of summer. Considering the weather expectations, we were pleasantly surprised and glad with the trip.

The city center of Bologna is mostly adorned by porticos covering sidewalks. Under the porticos, the heat becomes very tolerable. We also took a habit of retreating to our hotel between lunch and dinner to rest and freshen up. That’s how we survived without getting a heatstroke.

There is more than enough food choices and as Bologna is less popular than it’s neighboring Milan and Florence, it is not bombarded by a sea of tourists yet and the explosion of places encouraging consumerism which comes with it.

Charcuterie and Cheese platter at Simoni

Mortadella is one of the main products of the city, so we ate it 3 out of the 4 days of the trip. It was literally everywhere. Some shops offer aperol spritz by the Liter which is a good deal if you ignore the impact of alcohol to the body. I ignored this myself and had a glass.

Needless to say we had gelato every day. I couldn’t tell the difference in portions between small and medium, so I just ask for small and pay a few cents less.

Back to Bologna, thanks to the porticos, it’s a very walkable city. They even close the main street to cars on weekends, which makes an even cooler atmosphere. I also liked the narrow colorful streets around the historical center. Piazza Santo Stefano is a quiet spot to hang out and enjoy an aperitivo. During our trip, there was an open-air cinema viewing for free for weeks at the main piazza every evening. Take that Allianz Cinema.

As sweaty as it was, my favorite part was walking the 3 hour return trip from the city center to Santuario della Madonna di San Luca, again mostly under porticos.

Stairwell at the Santuario

Florence is a 45-minute train ride from Bologna, so naturaly, it was squeezed in the trip. My first thought upon arriving to Florence is that I’m very glad we stayed at Bologna. Yes, the Cattedralle di Santa Maria del Fiore is an impressive Gothic building. However Florence is definitely a victim of it’s own popularity with so much shops than I think is necessary to cater the swarm of tourists.

A street in Florence which reminds me of Baclaran in Manila

We made the most of the trip by passing by the main attractions, walking to a park to get a view of the city and finishing off with pizza and prosecco. 4 hours after, we were on our way back to Bologna.

Beautiful ceiling at Palazzo Vecchio
View of Florence from Piazzale Michelangelo.

We built an igloo, and these happened.

IMG_7046

Once in a while, we take trips that become part of the story of our lives. It’s the trip we tell others over and over again during lunches, dinners, and coffee breaks. Punch lines and embarrassing moments from them doesn’t become less funny over time. We recall memories from pictures of these travels when we are sick or couldn’t sleep at night.

I have been blessed to have visited many beautiful places in 2016, but the trip I talked about the most is the one I made with three other friends for a weekend to hike up in the alps, build an igloo, sleep in it, and hike again the next day. From fear of memories fading away, and to revive the life out of my own small cabin on the internet, I’ve decided to write about one special weekend when we built an igloo and these happened..

Brother : “But you are going to an Igloo Fest, right? So there will be lots of people there?”

Me: “Errr… no not really. It will be just be four of us.”

We met at 7:00 in the morning in front of the office. Packed with 2 days worth of food, clothes, water, sleeping bag, mat, duct tape, and a myriad of other hiking equipments, Girl A, Boy 1, Boy 2 and I drove to Melchsee-Frutt – a small village near Kerns, Switzerland. We took a quick gondola up a certain altitude and from there snowshoed our way to where we built an igloo.

Part I – Snowshoes

The first time I saw snowshoes was the day before the Igloo trip while renting them from the shop near the office. They are a pair of over-sized plastic (normally) with some metal spikes one wears under one’s hiking boots to be able to walk on soft snow without basically sinking. They are really cool, although as of writing, I’ve never snowshoed without a backpack behind my back and fully within hiking trails, so I could so far only associate snowshoeing with exhaustion and sledging. Why sledging, you wonder. I will get there in a sec.

Anyway, speaking of trails, Boy 1 is not much a fan of them. So instead of taking a normal hiking trail to reach our location, we snowshoed our way up and down to what felt like an eternity until they realized I probably wasn’t going to make it. Up to this day, I still don’t understand how we managed to get to our chosen igloo location without looking at a map.

Rescue number one – my loud breathing gave me away. As a first time hiker, I underestimated how much I would have to carry on my back for 2 days / 1 night of staying outdoors, considering I brought only things for myself. The relatively adventurous snowshoeing took its toll on my small Asian body and finally I couldn’t hide the fact that I wasn’t fit enough to carry everything on my own and walk at the same time. My hiking mates, whom I’ve known only for 3 months or so, decided to take everything that is not cotton or fleece from my bag and split my luggage among the three of them. For someone who has been living alone since 17, this was really embarrassing. But it is still less embarrassing than giving up and going home so I sucked it up and continue.

Part II – Sledging

Somewhere along the snowshoeing up and down off-trail came a fence-like border of rocks which we had to step over and continue from the other side. The other side, however, was not exactly flat. And one needs to slide a little bit to the left while sitting down after the fence of rock in order to be able to walk on two feet again. In this very small “slide”, I manage to screw up and instead of sliding to the left where Boy 1 was waiting, I just slid straight, 50 – 100 meters down say a 30 – 45 degree slope. (These numbers might be exaggeration, forgive me). It’s tough to assess exactly how long it was for the only thing I could remember is that I tried not to scream and when my snowshoe has gathered enough snow to stop me from sledging “free” further, my heart was pounding and I couldn’t move or do anything. Not because I was hurt, but because the experience was completely new to my brain. 5 year olds would probably call it fun, but for me it was a life and death situation.

Rescue number two – thanks to my unreasonable fear (at that time) of the beautiful powdered snow around me, Boy 1 had to run towards me, take my backpack and walk me back to the path we chose to take that day.

Part III – Igloo Building

Shortly after lunch, we finally stopped at a location where we would build our “organic” accommodation for the night. We wasted no time and started our work immediately. I don’t recall any proper lunch break after the exhausting snowshoeing part of the day. Fortunately, as a woman, there’s not much really I could do building the igloo because 1) I do not have the power to saw blocks of ice from the ground 2) I do not have the strength to carry blocks of ice sewed from the ground 3) I do not have the engineering capacity to build an igloo from blocks of ice. What I could only do was assist Boy 1 / 2 in providing powdered snow as glue to connect the blocks of ice together or in polishing the igloo with powdered snow as soon as the blocks are in place. I also provided assistance in handing their water / food when necessary.

At the end of the day, we managed to build a sturdy igloo with a small cooking and dining area in front.

Part IV – Sleeping

We were very luck with the weather for the sun was always out and the sky was blue the whole day. As soon as the sun sets though, the temperature dropped too low to the point that it’s not safe to stand still anymore, rather better to move around in order to keep one’s blood circulation going. We cooked vermicelli noodles with chili con carne for dinner (not very good combination, never having it again), boiled water for some tea and decided to call it a day. Oh wait, we managed to do some star gazing but at some point got dizzy using an iPhone app to match which constellation we could see from our visible share of the night sky.

We retreated to our well made sleeping beds and tried to sleep. Yes  – it was cold. Very cold. Perhaps it was because on my left was Girl A, and on my right was big wall of ice. Above me was also a ceiling of ice. I tried the fetus position, wrapped myself with 3 layers of clothing (which I know now as also a big mistake), but still couldn’t sleep. It was cold, very cold, but I couldn’t complain because 1) It is not in my Asian nature to do so 2) No one forced me to be there. It was too cold, however, to believe that I could survive to see the sun the next day.

So I looked up at the ceiling and recall thinking “Boy 3 was right (He didn’t join after experiencing the 1st igloo fest) – I’m going to die tonight.” I wanted to say goodbye to my new friends so I turned to my left to see if anyone else was awake. Indeed. Boy 1 was already looking at my direction, waiting for me to send the signal of defeat for God knows how long already, and asked me the question “Are you cold?”.

Rescue number three – (continuing the draft after a year or so). Apparently, I should have changed my clothes before getting inside the sleeping bag in order not to sleep with all the sweat, which will be cold water if not ice, I accumulated during the day. I was too shy to do this given there was no proper toilet around. So instead of asking to have the igloo to myself for 5 minutes to change, I simply ditched the suggestion. I then had to change in the middle of the night with everyone in the igloo. My igloo mates provided me with extra socks, hand warmers which I had to use as feet warmer and fed me tea. We switched positions so I get to be in the middle of two warm persons. With all these help, I finally managed to sleep. Until..

After two hours, I woke up again. This time, the father instincts of Boy 1 and 2 kicked in immediately and asked me if I was still cold. “No.. I’m hungry”. I ate my trail mix as quietly as I could, had some tea, and all of us managed to fall back to sleep fast enough until..

At 4:30 A.M., in the middle of the Swiss alps, inside an igloo built with our bare hands, with no heating except for a candle, no electricity, and no WIFI, my alarm from the day before set off waking everyone – again.

The funny thing is, despite all the hassles I’ve caused to these three people during the trip, they ended up to be the best buddies I would have in this foreign land I called home for the past 2 years. We went on to have more winter, summer, and autumn hikes together. As a matter of fact next week, fingers-crossed, we will attempt to have Igloo Fest 2018 🙂

 

Vanie Castro Takes Pictures

img_8194
Lamp Posts – Colmar, Alsace, France

In case you haven’t received a mail, or have not been forced to look at it on my phone or in a computer, then you probably don’t know about..

http://vaniecastrophotography.com

It’s a new domain dedicated purely for photographs I took and soon will take. Thanks to 500px, it doesn’t take too much resources now to set up a fancy web site like this. I couldn’t be happier that finally, my photographs have found a new home where they can be shared to everyone instead of living in the dark shadows of my hard and online drives.

Photography and I go a long way back. As a child, I recall looking through the pages of interior design catalogs or hanging out at bookstores browsing through books I could not afford. But it wasn’t until university years when I learned about this wonderful world called the internet that I realized how much time I could spend looking at and searching photographs. Back then, or even now for some, flickr was the site to join if you are a photography enthusiast. I spent quite some time on flickr explore, seeing the rest of the world through the eyes of other photographers. Someday, I used to say, I will also travel, take pictures, and bring a smile to someone’s gloomy day 🙂

I still have 2 accounts on flickr, one I couldn’t recover because Yahoo decided to disable my account which I haven’t used in years in favor of gmail. Fortunately, even as a teenager, I knew better than to post unnecessary images online.

I worked as a Software Engineer for Canon after getting my bachelor’s degree. Due to non-disclosure agreements, I can’t really share what I worked on, but I can tell you that they involved looking at high quality photographs. 🙂 I still have professional images of Moscow and well prepared still life table arrangements in my head which we used as test data. Working in Canon also means every other person is a photography enthusiast. People who goes to business trips and long term assignments would post beautiful pictures from Japan on social media which I envied looking at every time. As of writing, I still haven’t been to Japan, but it is at the top of my travel list. Finally, we used to get discounts on Canon products as employees, which is most likely why all my 3 cameras are Canon. I don’t think I will ever switch brands. 🙂

I was 22 years old when I got my first camera. It was from the Canon PowerShot line, but I couldn’t recall the exact model. It was pink and silver, and I paid CHF 140 for it. It died a natural death after a few years, and just before I left Canon, I managed to ask someone  to buy another candy bar point-and-shoot from Japan for me. This time, it was a purple Canon Ixus. I still have it and even brought it with me to Switzerland. I don’t use it anymore, but I think it still works perfectly fine.

Around 2012 when I bought my first DSLR. It was a Canon EOS 650D. I bought it in Singapore, but since I would prefer that it documents my family’s life (whom at this point I am 3.5 hours flight away), I left it in the Philippines after my first visit. I couldn’t afford to buy another one for myself so I kept photography at the back of my head. A year later, I couldn’t help it anymore and I bought myself a Canon EOS 700D, which I still happily use as of today. Despite my love for photography, I never sat down to understand the jargons of lenses, so I stayed with the kit lens until December 2016.

I have been very lucky to have found new friends who could figure out easily what brings me joy, or perhaps because I tell them anyway. They gave me a Canon EF-S – 24 mm – f/2.8 STM lens last Christmas! It is a prime lens that is sooo light, I wouldn’t hesitate to bring my SLR to hiking trips anymore. 🙂 It was after I received this gift that I realized again how much I enjoy taking pictures. I had the impression that Flickr doesn’t inspire me as much anymore, so I moved to 500px. And it is from there that I am able (with a fee and some fiddling) to create http://vaniecastrophotography.com.

Have a nice week ahead!

How to Implement Slowly Changing Dimension Type 2 in SQL Server Analysis Services

The other day somebody asked me how I could implement Slowly Changing Dimension Type 2 (SCD Type 2) in SSAS. I wasn’t able to give the answer right there and then, so I decided to create a demo video to answer his question and as a note to myself for future uses.

This is my first ever demo video by the way and I agree that it could have been better in many parts. I do hope that despite my amateur recording and editing skills, I am still able to send the message across. 🙂

2015 Book 6: Being Mortal by Atul Gwande

wpid-20150719_155320.jpg

Where I come from it is taboo to talk about death. Even your closest family and friends wouldn’t want to know how you prefer to die. In fact death is such an unacceptable fact of life that the mere act of talking about it is considered as “bad luck”.

In Being Mortal, Atul Gwande walks us through the reality of mortality – through old age and through terminal illness. As an American of Indian descent, he talks about how America as a society takes care of its aged population. As a surgeon, he shares how patients with terminal illness and their families dealt with their situations.

The book touches on a topic not many others dare to discuss; it raises questions others are unable to ask before. What is a decent way to leave this place, for instance? What is a decent way to live in it? How far would you go to prolong a loved one’s life? Would you rather live a life in constant pain or to let go of both?

As much as Being Mortal is thought-provoking, it is also well written and organized. Perhaps  because the author is a man of science that he is careful to distinguish facts from opinion. Unless you are a God or a Demi-God who lives on ambrosia, then this book is worth reading.

Would I recommend this book to a friend? Yes.

Automate SSIS 2012 Project Deployment and Configuration Management using PowerShell – Part 3

Continuing: Automate SSIS 2012 Project Deployment and Configuration Management using PowerShell – Part 2

Download SSISProject containing:

  1. DeploymentDemo SSIS Project
  2. SimpleSSISDeploy.ps1

Step 3: Execute SimpleSSISDeploy.ps1

Last and definitely NOT the least, where all the magic happens – SimpleSSISDeploy.ps1.
I put comments where needed, and you can download a zip of all the components, as well as a sample SSIS project at the bottom of this post. 🙂

param ([string]$ConfigurationsPath,
       [string]$IspacPath, 
       [string]$ParametersXml, 
       [string]$Environment)
       
# Store the IntegrationServices Assembly namespace to avoid typing it every time
$ISNamespace = "Microsoft.SqlServer.Management.IntegrationServices"

# Load the IntegrationServices Assembly
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Management.IntegrationServices") | Out-Null;

       
function Main()
{

    # Input validation
    if (-Not(Test-Path($ParametersXml)))
    {
        throw New-Object System.ArgumentException "Parameters.xml not found"
        return
    }
    
    #Get configurations from *.dtproj.user
    [xml]$configFile =  Get-Content $ConfigurationsPath
    $configurationsNode = $configFile.SelectNodes("/DataTransformationsUserConfiguration/Configurations/Configuration")
    
    # Get configuration for $Environment parameter
    $configurationsNode | % {
        if ($_.Name -eq $Environment)
        {
            $serverName = $_.Options.ServerName
            $pathOnServer = $_.Options.PathOnServer
        }
    }   
    
    if ([string]::IsNullOrEmpty($serverName) -or [string]::IsNullOrEmpty($pathOnServer) -or 
        $serverName -eq $null -or $pathOnServer -eq $null )
    {
        throw New-Object System.ArgumentException "Could not connect to Server: $serverName. Does it really exist?"
        return
    }   
    
    # Get catalog, folder and project name from $pathOnServer
    $catalogConnectionString = "Data Source=" + $serverName + ";Initial Catalog=master;Integrated Security=SSPI;"
    $path = $pathOnServer.Split("/", 4)
    $catalogName = $path[1]
    $folderName = $path[2]
    $projectName = $path[3]
    
    if ([string]::IsNullOrEmpty($catalogName) -or 
        [string]::IsNullOrEmpty($folderName) -or 
        [string]::IsNullOrEmpty($projectName))
    {
        throw New-Object System.ArgumentException "Check that $Environment build configuration is set correctly in the SSIS project."
        return
    }
    
    # Connect to the SSIS Server
    $sqlConnection = New-Object System.Data.SqlClient.SqlConnection $catalogConnectionString
    $integrationServices = New-Object $ISNamespace".IntegrationServices" $sqlConnection
    
    if ($integrationServices -eq $null)
    {
        Write-Host "Unable to connect to Integration Services Catalog."
        return
    }
    
    # Get the existing catalog if it exists
    if ($integrationServices.Catalogs.Contains($catalogName)) 
    {
        Write-Host "$catalogName catalog found"
        $catalog = $integrationServices.Catalogs[$catalogName]        
    }
    else
    {
        Write-Host "Could not find "$catalogName" Catalog. Are you sure you have the correct name?"
        return
    }
    
    # Get catalog folder
    if ($catalog.Folders.Contains($folderName))
    {
        Write-Host "$folderName catalog folder found"
        $folder = $catalog.Folders[$folderName]
    }
    else
    {
        Write-Host "Could not find $folderName catalog folder. You are almost there."
        return
    }
    
    # Read the project file, and deploy it to the folder
    [byte[]] $projectFile = [System.IO.File]::ReadAllBytes($IspacPath)
    $project = $folder.DeployProject($projectName, $projectFile)
    
    # Get project
    if ($folder.Projects.Contains($projectName)) 
    {
        Write-Host "$projectName project found"
        $project = $folder.Projects[$projectName]
        
    } else {
        Write-Host "$projectName project not found. Sorry :("
        return 
    }
    
    # Get function parameters from file
    Write-Host "Reading from Parameters.xml"    
    [xml]$file = Get-Content $ParametersXml
    
    Update-Parameters $project $file 
} 

function Update-Parameters($project, $file)
{
    # Update Project Parameters
    $projectParameters = $file.SelectNodes("/SSIS/" + $Environment + "/ProjectParameters/Parameter")

    $projectParameters | % {
        
        $parameter = $_.Name
        if ($parameter -eq $null)
        {
            continue
        }
        
        if ($project.Parameters.Contains($parameter))
        {
            Write-Host "$parameter project parameter found"
            $project.Parameters[$_.Name].Set([Microsoft.SqlServer.Management.IntegrationServices.ParameterInfo+ParameterValueType]::Literal,$_.InnerText)
            Write-Host "$parameter project parameter value updated"
        }
        else
        {
             Write-Host "$parameter project parameter NOT FOUND"
        }
    }
    
    Write-Host "Updating parameters of" $project.Name "project successful"

    # Update Package Parameters
    $packages = $file.SelectNodes("/SSIS/" + $Environment + "/Packages/Package")

    $packages | % {
        
        $packageName = $_.Name
        $parameters = $_.Parameters.ChildNodes
        
        if ($project.Packages.Contains($packageName))
        {
                Write-Host "$packageName package found"
                $ssisPackage = $project.Packages[$packageName]
                
                foreach ($param in $parameters){
                
                    $paramName = $param.Name
                    $paramValue = $param.InnerText
                    
                    if ($ssisPackage.Parameters.Contains($paramName))
                    {
                        Write-Host "$paramName package parameter found"
                        $ssisPackage.Parameters[$paramName].Set([Microsoft.SqlServer.Management.IntegrationServices.ParameterInfo+ParameterValueType]::Literal,$paramValue)
                        Write-Host "$paramName package parameter value updated"
                    }
                    else
                    {
                        Write-Host "$paramName package parameter NOT FOUND"
                    }
                } 
                Write-Host "Updating parameters of $packageName package successful"
                $ssisPackage.Alter() 
                         
        }
        else
        {
            Write-Host "$packageName package NOT FOUND"
        }
        
    }

    $project.Alter()
}

Main

Sample execution code:


.\SimpleSSISDeploy.ps1 -ConfigurationsPath "F:\PROJECTS\SSISProject\DeploymentDemo\DeploymentDemo\DeploymentDemo.dtproj.user" -IspacPath "F:\PROJECTS\SSISProject\DeploymentDemo\DeploymentDemo\bin\Development\DeploymentDemo.ispac" -ParametersXml "F:\PROJECTS\SSISProject\DeploymentDemo\DeploymentDemo\Parameters.xml" -Environment "Development"

And that concludes my solution to an automated SSIS Deployment and configuration management. Feel free to comment if anything is not clear. 🙂