GitHub Actions Examples

I’ve started to move a lot of my personal stuff to GitHub. I’ve also started using GitHub Actions. In the spirit of contributing to the open source community, I created a GitHub Actions Examples repo. You can find it here: https://github.com/inhifistereo/actions-examples

So far I just have a dotnet core Azure Function example in there now but it will grow over time as I start adding more examples.

Take a look and let me know if you have any questions.

Azure ARM template for 1-to-many Windows Servers

I find myself having to create Azure VMs from time-to-time when I’m traveling or using my Surface Pro and I need a little more horsepower than the current rig I’m on at the moment. I wanted to create an ARM template that made this process as easy and as quick as possible. Figured I’d share my hard work with the rest of the world:

https://github.com/inhifistereo/Azure-ARM-Windows-Server-with-Custom-Script-Ext

What’s cool about this ARM template (at least I think it’s cool) is that it allows you to create more than 1 server. Additionally, I’m using Chocolatey to load Git and VS Code too. Feel free to fork and customize to your heart’s content.

Get count of objects in a directory with PowerShell

A quick post!

Today I started migrating content from an on-premises source to SharePoint Online using ShareGate’s Migration tool (AWESOME TOOL by the way!). I’m about 2 hours in to the migration and I was curious how much content I had to go. I need to get a count of all the objects in the directory. PowerShell to the rescue:

$path = "[paste directory path here]"
$files = gci $path -recurse | Measure-Object
$files.Count

You’ll get a count of all the objects in the directory. This number will help me gauge how long the migration will take. Happy migration!

Configure PowerPhone with Cisco phones

We’ve started rolling out PowerObjects’ PowerPhone. Users love the functionality and it’s lead to more CRM use overall.

We researched a few different CTI solutions. Getting it setup in CRM is a breeze, but when it comes to configuring things on user computers it’s actually harder than I originally thought. It took us about two months and too many hours to figure out. So I’m sharing the necessary steps so you don’t have to feel the same pain.

YESSSS

There are assumptions we have to make before we proceed:

Assumptions

  • You are on Cisco’s UCM (Unified Communications Manager) platform 9.0 or above.
    • UCM 9 supports Windows 7
    • UCM 10 and 10.5 support Windows 8.1
  • You have already downloaded the TAPI install files from UCM – (Note: there is no other way I know of to get the install files)
  • You have already uploaded the PowerPhone solution in your CRM instance and enabled it – found HERE.

Steps for installing the PowerPhone agent on user computers

  1. Double click the TAPI installation (be sure to choose the correct version – x86 vs x64). Note: Just “next” the whole way through
  2. If not installed, install .NET framework 4.5
  3. A restart may be required at this point
  4. Download the PowerPhone Agent from HERE
  5. Open the zip file and copy the entire “PowerPhone_1_3_2_5_agent” directory to the user’s C: drive
  6. Once copied, open the directory and pin the PowerPhone.exe file to the task bar. This will help the user when logging in to the phone.
  7. Log in to Unified Communications Manager
  8. Go to User Management > End User
  9. Search for the User. Once found open the end user configuration by clicking on their name
  10. Scroll to the bottom and click “Add to Access Control Group”Add to Access Control
  11. A pop-up will open, search for “Begins with ‘Standard CTI'”Choose Role
  12. Assign the user the “Standard CTI Enabled” role
  13. Hit Save on the End User Configuration record
  14. Go to Start > Launch TSP
  15. Right click the TAPI driver in the notification area and choose “Cisco TAPI configuration”
  16. Once open, make sure the instance is selected and choose “Configure”Configure
  17. On the User tab, have the user enter their Cisco username and password – if you have LDAP you would enter your AD credentials hereLogin
  18. On the CTI Manager tab, enter the IP address(es) of your Cisco serversIPs
  19. Make sure the user has PowerPhone rights in CRM before proceeding
  20. Open PowerPhone and configure the connection:PowerPhone1
  21. Select the phone line and add in the connection info to your CRM instance. If the phone line doesn’t appear in the dropdown then something hasn’t been configured properly with the TAPI driver.
  22. Once connected, click on settings and set the outgoing number (9 in our case)PowerPhone2
  23. Last step (at least for us) we had to make an outgoing call from PowerPhone so the TAPI driver will make the proper connection to the phone system. YMMV on this.

Powershell hack with IE

I wrote this because I wondered if it could be done. I figured it would be pretty difficult to come up with a Powershell hack with IE but as it turned out it took just a little bingling and this is what I came up with:

start 'http://www.inhifistereo.com'

Start-Sleep -s 5

Get-Process iexplore | Foreach-Object { $_.CloseMainWindow() }

exit

The script opens the browser, waits 5 seconds, then closes the page. Pretty simple I know but I’ll be expanding on this script more in the future. Some possibilities/uses could be:

  • Check a web page for content then send an email depending on what’s found
  • Keep VPN connection open
  • Check if a website is up

I went even farther as to add it to the Task Scheduler and have it run every 30 minutes. There are plenty of blog posts out there outlining how to create a Task in Task Scheduler, but the small hiccup I ran in to was how to run Powershell from the Scheduler.

When you get to the Actions tab add the path to Powershell:

C:WindowsSystem32WindowsPowerShellv1.0powershell.exe

The “Add arguments” section is where you add the command and path to your .ps1 file:

-Command “& [path to your file without brackets]”

The possibilities are pretty endless here. I don’t know if anyone else will find this useful but I know I will use it.

Long overdue update

Time to knock the dust off the blog. I only have 1 post on the year. But I have good reasons. LOTS of change at work and home. Let’s replay everything month-by-month.

March

In March I was given the opportunity to manage the Trek Helpdesk. My plan was to combine the Enterprise Collaboration team (team of 1: me) with the Helpdesk (team of 5). There were a lot of synergies (see what I did there?) between the types of work the two teams were doing. I was trying to get people to use collaboration tools, but was limited in my reach. Now with the Helpdesk I can educate far more people about collaboration tools while marrying that with even better technology experiences (read: hardware). We started testing all kinds of new platforms: tablets, touchscreen laptops, ultrabooks, high-end desktops. Very cool, slick stuff.

April

Dawn and I welcomed our third son to the family; Shane. Check out photos here: http://1drv.ms/1zTEv5V. We couldn’t be happier. That said, 3 kids is a LOT of work.

May

May was a particular busy month for me. Filmed a pretty cool case study for Microsoft. Check it out:

In May I also got to migrate Trek’s sister company Trek Travel to SharePoint Online. We moved about 180GB of content using Sharegate‘s Migration tool from their on-premises fileshare to SharePoint online. Worked like a charm!

What I’m especially proud of is how fast SharePoint has permeated their day-to-day work. The other day one of their Mac users called in and their laptop had to be rebuilt. One of the helpdesk guys asked “how much content do you have stored on the laptop?” Know what the user said? “None, it’s all on SharePoint.” Score one for SharePoint!

June

Even busier month! Traveled to Vista, CA and New York all in the span of 9 days. Needless to say my sleep schedule was busted.

Electra bikes is based in Vista. I took Ben with me so we could take inventory and get a handle on the place. The office is really chill and all about having fun. The weather was awesome too.

I visited NYC for the first time. I was invited to speak at Microsoft’s “Future of Work” event. The panel of invitees included Jamba Juice, Delphi, Herman Miller, Trek, and a couple of industry analysts. We all gave our take on what the future of work will look like and how we’ll get there.

I got to stay in Times Square for a few nights. Here’s the view from my hotel room:

20140615_231327852_iOS

July

A good chunk of family time in July. I actually started drafting this blog post in July…

I started ordering Surface Pro 3’s in July and the feedback has been outstanding. The best part about the Pro 3 is the keyboard cover. We experimented with the Dell Venue 11 but the biggest complaint was the keyboard cover. Users said it just wasn’t going to work tactile-wise no matter how much they liked the tablet itself.

August

My wife and I took the family to Florida.  For the last 3 years we’ve gone down to Siesta Key. There’s nothing to do but sit on the beach and watch the day go by.

20140822_000015524_iOS

Technology-wise I’ve been focusing on two things at home: decreasing my Cable bill and scanning all our paperwork. Both will be the subject of upcoming blog posts.

September

So far this month the biggest focus has been on Records Management (RM). It’s been awhile since I’ve had to do any work around RM. SharePoint 2013 has come a long way with RM. I’ve also noticed that the SharePoint community doesn’t have a lot in terms of resources so I’ll be posting about that soon too.

Finally, I had the opportunity to visit Herman Miller’s Design Yard last week. They take things to a whole different level. They’re all about making the most of a space’s purpose and driving every ounce of value from that space. I know I’ll never look at a conference room the same way again.

http://c.brightcove.com/services/viewer/federated_f9?isVid=1&isUI=1

I hope to get back in the swing of posting regularly again. See you soon.

Add a clock to your web page

Had an interesting request to add a clock to a web page yesterday. Turned out to be a bit more difficult than we thought. We used moment.js for this project. It’s a VERY cool javascript library that helps you with time. If you’ve never done work with javascript and time consider yourself lucky. It’s downright hard. Moment.js takes the guesswork out – although there’s a little bit of a learning curve. Let’s get started.

First, add a div to your page and give it an id.

Now, we add our script in the footer of the html.

//call jquery and moment.js libraries
http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
    http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js


//function to create clock functionality. updates every second.
        function timedUpdate() {
            showClock();
            setTimeout(timedUpdate, 1000);
        }
//moment.js function. get current time > pass to moment function > create html
        function showClock() {
            var now = new Date().getTime();
            var test = moment(now).format('MMMM Do YYYY, h:mm:ss a');

//create html
            $("#clock").html(test);
        }

//call update
        timedUpdate();
    

And then you get a nice clock to work with.
http://www.inhifistereo.com/wp-content/uploads/2014/02/Clock.html

sharepointwookiee.com is now inhifistereo.com

Living in Wisconsin we get snowed in from time to time. It’s nowhere near as bad as this Russian town (Real Russian Winter) but this weekend we got about 6 inches. With ample time on my hands I figured it was time to do some internet housecleaning.

Consolidated Twitter handles

Managing @spwookiee and @inhifistereo was a lot. I have used inhifistereo as a handle since the days of AOL so I feel a pretty tight attachment to it. But spwookiee had the following. Did a swap similar to THIS and I was off and running.

Renamed Blog

Along the same lines as the Twitter handle swap, just wasn’t feeling sharepointwookiee.com. I had always planned to do something Star Wars-esque with the site but never got around to it. Additionally, I’m doing more BI and CRM work these days on top of my SharePoint work. Felt kind of weird posting CRM stuff on a blog that had SharePoint in the title. Plus, choosing another domain made the next change a little easier.

Goodbye GoDaddy, Hello WordPress on Azure

I use Windows Azure a lot at work. I fall in love a little more every time I log in to the portal. So why not use wordpress on azure for my blog hosting too? I get way more control and it’s a little cheaper too.

I wanted completely out of GoDaddy’s grip so I transferred my domains to gandi.net. I’m way happier because I get everything included in the purchase price with gandi.net that GoDaddy charges ala carte for. So take that GoDaddy:

Pros and Cons

As with any decision, there are pros and cons. I listed most of the pros above. I can think of 2 Cons. 1) Dip in viewership/following. New URL means folks will have to update their RSS readers. Hopefully I can find a way to redirect. 2) New tech. I do use Azure fairly often, but I don’t know everything about it. I’ll assume there will be a learning curve of some sort.

The whole switch took me about 8 hours over the course of 2 weeks. I did a little here and there when I had the time. But the biggest chunk happened over this weekend. Pretty happy with the results so far.

PowerPivot using large SSRS ATOM feed fix

I’ve talked on, blogged about, and Tweeted about PowerPivot for awhile now. By itself, PowerPivot is pretty cool, but add it on to SharePoint and you have the Voltron of BI solutions.

PowerPivot Voltron

I can pull from Oracle, Excel, a CSV, and DB2 all in the same file. CRAZY! What’s even cooler is that I can pull a SSRS ATOM feed in to PowerPivot . . . sometimes.

By default – if you’re using SQL 2012 Integrated mode – the largest SSRS ATOM feed you can pull is 110 MB. We have some pretty ridiculously large reports at Trek and a user was attempting to pull one of these monsters in to PowerPivot and it was choking. To make matters worse, PowerPivot was just throwing a 500 error (Unknown error). Not really helpful…

I opened a MS Case and began troubleshooting. We went back and forth and back and forth (6 weeks!), but we finally found the solution. So to get PowerPivot using large SSRS ATOM feeds do the following:

  1. Open the file Client.Config on your front end servers. The File is located here: C:/Program Files/Common Files/microsoft shared/Web Server Extensions/15/WebClients/Reporting/client.config
  2. Search for “httpStreaming” and “httpsStreaming”
  3. Within both these Bindings, change the value of the following – this will increase the Data Size from 110 Mb to 1.1 Gb:
    1. maxReceivedMessageSize from “115343360” to “1153433600″
    2. maxStringContentLength from “115343360” to “1153433600″
    3. maxArrayLength from “115343360” to “1153433600″
  4. Save the File
  5. Do an IISRESET across all SharePoint Servers.

Happy PowerPivot’ing.

Share to Yammer button

Had an interesting request a few weeks ago. HR wanted to be able to share pages out to Yammer. I instantly ruled out a workflow because I couldn’t post as the user. Then ruled out a console app for 2 different reasons: the logic could get complicated and it didn’t allow for much flexibility. I went over to the Yammer Customer Network and started poking around. I ran across a few threads that talked about using the bookmarklet so I went and took a look at it: https://www.yammer.com/company/bookmarklet

The app – as designed – is aimed at users who want to share pages via their browser, not necessarily on a web page itself. I opened the developer toolbar and hashed through the code. I managed to find the JavaScript that snags the URL and opens the bookmarklet window. As Steve would say, “Talk is cheap, show me the code”:

<h2>Share this page . . . </h2>

The code will give you the share to yammer button:

Share it with Yammer

YAHTZEE!

Yes!

Once the user clicks the icon a new window will open and – as long as they’re logged in to Yammer – they’ll be able to create a new Yam with the URL of the page they want to share in the update’s body.

Bookmarklet Window example

Give it a shot and let me know what you think.