Tips for the Disorganized Laptop Traveler

Introduction

I realize with the current (as of the time I write this) COVID lockdown, people aren’t doing a lot of traveling. But things are beginning to open back up, and will continue to do so as the year progresses.

In a former job I traveled a LOT. In addition I frequented user groups and conferences, giving presentations. Over time I’ve picked up a few handy, and inexpensive tips and tricks for keeping your laptop bag organized. So I thought I’d do a bit something different with this post and share some of these tips with you.

Keeping It Together

I have a lot of laptops, I admit I’m a bit of a gear nerd. Most folks though, have at least one, along with a tablet of some type, plus various accessories. How do you keep the power supplies plus all the associated cords neat and together?

I use pencil bags available in my local big box store in the school supply area.

These bags are inexpensive, typically around $3, come in a variety of colors, and hold a lot. Each laptop I have has a bag associated with it, which holds the power supply plus any extra cables I use with it.

As you can see, this is the (after market) power brick for my Dell Inspiron, along with two USB cables (one Apple and one Micro-USB) that I often need with that computer. When I’m ready to go somewhere, I just reach into a box and grab the bag for the laptop I’m taking with me.

In addition, we all seem to have lots of spare cables. I’ve used these bags to organize my cables, one for Micro-USB, another for USB-C, and so on.

What’s In The Bag?

So how do I remember what’s in each bag? Well at first I bought the book “How To Be a Psychic for Fun and Profit”, so I could use my magical abilities to just discern what was in each pouch. But the book didn’t make much sense, until I realized what’d I had actually bought was “How to Be Psychotic for Fun and Profit”. So I abandoned that and went with an alternate solution.

I purchased small tags, these are typically sold as tags for keys. You’ll find them in the office supply section of stores. On each tag I write what’s in the bag, making it easy to identify.

They are inexpensive, so if I decide to reuse a bag for something else I can take off the tag, throw it away and put on a new one. They can also be used to identify other devices.

Here I’ve attached one to each of my USB keys, to let me quickly identify the size. For other keys in my collection I might also write down what’s on there, for example “Backup for XYZ Project”.

It Just Needs More Power

One of the first things I do after I get a new laptop is hop on Amazon or swing by my used computer store and purchase spare power supplies for my laptop. This lets me keep one on my desk, one in a bag, and sometimes I’ll get one more to put by my recliner.

When I get a power supply, I use a Sharpie to write which laptop the power supply goes with.

Now I don’t have to think about which laptop this supply goes with.

It’s gotten a bit easier these days as many laptops are now powered with USB-C. This makes it much easier to share supplies. Earlier I showed the power supply I travel with for my Dell Inspiron. I actually have two of these, one for my Dell, and a second for my 2017 Apple MacBook.

This model provides 87 Watts to the laptop, plenty to power not just the laptop but any accessories I want to plug into the laptop like a USB monitor, hard drives, and the like.

In addition this power supply also has four USB A ports which I can use to recharge my iPads, Android tablets, iPhone, etc. This is especially nice in places like coffee shops or hotels where plugs may be limited.

Power To The People

Another thing I do to help address the problem of limited plugs is carry a small extension cord.

These are two I had handy. One is setup for devices with three prongs, the other two, I pick the one to use depending on what equipment I’m bringing with me.

Both are 9 feet long, which may seem a bit excessive but I have learned from experience wall plugs are not always where they are convenient. I can’t tell you the number of hotel rooms I’ve been in where the desk was no where close to the plug.

There may also be competition for an available plug. The small coffee shop I frequent has very few plugs. I’ve found I can make new friends by using an extension cord and offering to share it.

Hold It Together

In order to manage the mess of wires that accompanies any electronic device, I use Velcro cable ties.

These things are great. EVERY cord that comes into my house gets one. As you would expect, all my cables, laptop power cords, etc get these.

But I also put them on the power cords for my TV, lamps, power tools, fans, all my ham radio gear, you name it if it’s a cord it gets one of these straps.

Rising to the Occasion

Hand issues seem to run rampant in the tech community, being on a keyboard all day can take a toll. Something you can do to help your hands is get a laptop riser.

These are two different types I have, but there are many others you can pick from. On the left is a pair of wedges, they seem similar to door stops. They are nice because you can spread them out for any size laptop, and raise the laptop to different heights.

On the right is a riser that folds up nice and small, but the legs can extend out for whatever size you want. The L shapes on the front (closest to the lower edge of the photo) keep the laptop from sliding off. Note, if you have an extremely thin laptop your wrists may brush against the tops of the Ls.

Either way, it can raise your keyboard up and make it much more comfortable and ergonomic for typing, especially for long periods of time.

Which End is Up?

Cables ends like USB-C or Apple’s lightning are a real blessing as you don’t have to figure out which end is up. Micro-USB however, is another story.

As I’m sure you are aware, Micro-USB has one edge longer than the other. As I’ve aged, with my poor old eyes it can be hard for me to tell which side is the longer one, especially in dim light. I’ve come up with a simple solution though.

I’ve taken a silver Sharpie marker, and drawn a line on the side of the cable that corresponds to the long side of the connector. For white cables, I use a black Sharpie.

For the devices I plug into, I draw a corresponding line where the long side plugs into.

Here you can see I’ve drawn a black line by the port where the long side of the Micro-USB goes. This makes it extremely easy to plug my Micro-USB cables into the various devices I use, I just align the two lines and away I go, quick and easy.

You could also decide to draw the line on the short side of the Micro-USB connector, rather than the long side. Just be consistent once you make the choice.

In addition to silver and black, I’ve found the orange and red Sharpie markers work pretty well too.

I’m a Big Fan

One last piece of gear I keep in my bag is a small fan.

This fan has a battery and can be recharged over Micro-USB. As a matter of fact the previous photo is the back of this fan.

I can’t tell you how many stuffy conference rooms I’ve been stuck in. At my local coffee shop, sometimes sitting in front of the window can get really hot when the afternoon sun starts coming in. Even a small fan like this can make a huge difference.

This fan is small, about the size of my hand (although I admit I’ve got big hands). I like this model, it has three speeds and can run even when the battery is being recharged.

These fans come in a variety of sizes, shapes, and prices, so pick one that fits your budget and laptop bag.

Conclusion

In this article I’ve laid out a few tips that I hope will make your life a bit easier, and help get your tech gear organized.

If you have tips and tricks you want to share do so in the comments below, or let me know if you’d like to see more blog posts like these.

Having Multiple Entries for the Same PC in Microsoft Remote Desktop Application on Apple macOS

Introduction

In a previous blog post, Using the Microsoft Remote Desktop Application on Apple macOS, I showed how easy it was to remote control a Windows computer from your Mac.

One question I get asked is “Can I have multiple entries for the same computer?” The answer is yes!

This, of course, leads to another question, “Why would you want to?”

Reasons for Multiple Entries

There are a number of valid reasons for wanting multiple entries in Remote Desktop to the same computer. Let’s cover a couple by using examples.

First, let’s say you have a Windows 10 computer in the family room where your child plays games and does school work. Wisely you have setup their account as a “standard user”.

You have an account as well, as an administrator, to handle administrative tasks such as installing software, making sure updates are being processed and the like.

You could setup entries in Microsoft Remote Desktop, one for each user that logs into the computer. This allows you to have one entry to login as yourself, and a second to login using your offspring’s ID.

Now when your child comes to ask you to install the latest updates to Minecraft on the family computer, you can simply remote to it from your Mac using their ID, and install the updates providing your admin user ID and password. You’ll also have the entry to login as yourself, so you can apply updates and do maintenance.

For the second reason, you may wish to access your remote PC with different sets of option. In the blog post I mentioned earlier, I set it up to use all the monitors on my Mac.

Every so often though, I want to have my remote Windows computer running in a window. This allows me to see something on my remote machine, while still having my macOS desktop available.

One example, in my previous post I showed how to configure Windows to allow for remote access. I did so by having the Windows machine in a window on my Mac on one monitor, while creating the post in Safari on my macBook on a second monitor. This let me have them side by side, making it easy to create the instructions.

Rather than having to change the settings each time, I have two entries for my main Windows computer. The first, which you saw created in the first blog post in this series, opens the Windows machine using all monitors. The second opens it up in just a window.

Those are just two reasons, I’m sure you’ll be able to come up with many more.

Adding a Second Entry for the Windows PC

First, I’m going to assume you’ve already read my first article, Using the Microsoft Remote Desktop Application on Apple macOS. If you haven’t, please take a moment now to do so.

With Microsoft Remote Desktop open on your Mac, click the + button at the top, then pick Add PC in the drop down.

Note that for security reasons, in the screen shots I’ve replaced with the actual name of my computer with <name>.

Start with the name of the computer in the PC name, and pick the user account to login in as, or leave it as “Ask when required“.

Now we want to use the Friendly name to indicate not just the computer name, but also how this is used. For this example I’m going to have my remote machine display in a window, so I’ve entered <name> in a Window.

Next we’ll need to configure it to show up in a window, so click on the Display tab.

Here I will uncheck the default of Start session in a full screen, then check on Fit session to window.

Then, at the bottom I checked on Update the session resolution on resize. This way when I resize the window on my Mac, it will resize the computer I’m remoting into so the desktop will fit the window.

You can change the Devices & Audio and Folders if you wish. Since I’ve already covered those in the first article I’ll just click on the Add button.

Update the Existing Connection

Before we open the new connection, we should update the friendly name of the existing one to make it clear what the difference is. To do so, click on the pencil icon in the upper right of the connection created in the first article.

Go to the Friendly name field, and enter the name of the computer followed by (for this situation) All Monitors, then click Save.

Below you can see it now reads <name> All Monitors, and beside it the new entry we just added for <name> in a Window.

It’s now very easy to tell the difference in the two connections.

Launching the New Connection

Let’s now launch the new connection by double clicking on it.

Here you can see a new window appears on my Mac, showing my Windows desktop. (Note that you can see a bigger version of any of the images in my blog posts by double clicking on it).

You can see the window with the full Windows 10 desktop, including the Windows task bar. You can also see the macOS toolbar across the bottom, as well as the Mac menu bar at the top.

You can also resize the window. If you checked the Update the session resolution on resize option, the resizing the window will also resize the Windows desktop as you see below.

You can see my Windows 10 desktop now fits nicely into my resized window.

Please note you can only have one connection to a computer active at a time. If I am in the windowed version of my connection, then go back to the Microsoft Remote Desktop connection window and double click on the <name> All Monitors, it will disconnect the <name> in a Window session then launch the all monitors version.

Any time you launch a connection, it will disconnect any existing connection, if there is one, in favor of the newly launched one.

Conclusion

In this article we showed how to create multiple connections to the same computer in the Microsoft Remote Desktop application on macOS. This works with Big Sur as well as previous versions of macOS.

We also covered various reasons why you might wish to create multiple connections within Remote Desktop.

Armed with this information you can now create multiple connections to the same computer to fit the ways in which you want to use the remote computer.

Supressing “The certificate Couldn’t Be Verified” message Using the Microsoft Remote Desktop Application on Apple macOS

Introduction

In my previous blog post, Using the Microsoft Remote Desktop Application on Apple MacOS, I showed how easy it is to connect to one of your Windows computers from your Mac.

I frequently use the Microsoft Remote Desktop application on my Apple MacBook Pro to connect to one of my Windows computers. It presents a nice interface that’s easy to use and setup.

Once you’ve added your computer to the Microsoft Remote Desktop application (you’ll find the instructions in my previous post), all you have to do is double click on it to access your remote computer.

Here is the launching point, note that for security reasons in all of the images in this article I’ve blurred out the name of my computer and replaced it with <name>.

There is one irritating behavior. When connecting to a computer it frequently displays the following message: “You are connecting to the RDP host <name>. The certificate couldn’t be verified back to a root certificate. Your connection may not be secure. Do you want to continue?

Having to stop every time and click Continue is really annoying. Especially if you are on your home network, connecting to a computer you own and trust. There’s an easy fix though!

Suppressing the Warning Message

Simply click the Show Certificate button to display the certificate information.

Once you review, simply put a check mark in the “Always trust...” checkbox (pointed to by the arrow) then click Continue.

Since you are changing the trust certificates for your MacBook (or other Apple Mac computer, like the Mac Mini), macOS will prompt you to enter your admin password. Do so, then continue.

From here on out, all you need to do to connect to your remote computer is double click on it, and (if you’ve not saved it within the remote desktop program) enter your credentials. No more having to click to continue past the “certificate couldn’t be verified” message.

Conclusion

I’ll wrap this up with two quick notes. First, this works on the last several versions of macOS including Big Sur.

Second, while I’ve used Windows as the example, this will work with any OS (such as various Linux distros) that support RDP (Remote Desktop Protocol). Sadly, macOS does not support RDP so you cannot connect to another Mac from the Microsoft Remote Desktop application.

Using the Microsoft Remote Desktop Application on Apple macOS

Introduction

I use many computers in my daily life, including Windows, Apple Mac’s, and Linux computers running a variety of distros. It’s very convenient for me to be able to remote into another computer from whichever computer I happen to be on.

On my MacBook (although this would work on any Apple machine running macOS, such as a Mac Mini), the Microsoft Remote Desktop application is a fantastic program for remoting to another computer.

While primarily designed for accessing a Windows machine, it will work with most computers that support the RDP (Remote Desktop Protocol) such as many Linux distros.

Note that it will not let you connect to another Apple Mac, as macOS does not support the Remote Desktop Protocol. You can go from a Mac to Windows (or some Linux) computers using the Remote Desktop application, but not to another Mac.

Microsoft Remote Desktop is free, and in the Apple App Store. Just do a search for Microsoft Remote Desktop, get and install it. But don’t open it quite yet, as we have to configure the computer you are going to connect to.

Configure Your Windows Computer

I’m going to assume you are connecting to a Windows 10 Pro computer. Click on the Start button, the pick Settings. In the Windows Settings, pick System.

On the System page, scroll down in the menu on the left and click on Remote Desktop. (You can click on the image below, or any of the ones in this article, to see them in their full resolution).

You’ll first need to toggle on the Enable Remote Desktop setting, as I’ve done here.

Next, look under “How to connect to this PC”. This has the name you need to enter into the Microsoft Remote Desktop app. In this image it shows <name>, but for you it will show the name of the computer. Note that for security reasons, I’ve replaced the actual name of my computers with simply <name> in the screen captures.

Finally, at the bottom look at the User accounts section. By default, if you are an administer on the computer, you are automatically able to remote to the computer.

If you want a standard user, in other words a non-admin user, to be able to remote in you’ll need to add them using the “Select users that can remotely access this PC” link.

At this point you’ve now setup your Windows computer to be remoted into. Note you only have to do this once on this computer, after that it can be remoted to from other computers.

Adding a PC to Microsoft Remote Desktop on your Mac

Now return to your Mac. Assuming you’ve installed the Microsoft Remote Desktop application, open it.

The first time in, you’ll see the big “Add PC” button right in the middle. After you’ve added the first machine, using the instructions here, you can add more computers using the plus button (pointed at by the big red arrow) and pick “Add PC” in the menu.

You’ll then be shown the Add PC window. Start by entering the name of the computer you want to connect to.

After entering the computers name, you’ll see the User account line, which by default is set to Ask when required. In this mode you will be prompted for your login credentials every time.

As an alternative, you can save your credentials by picking Add User Account… in the User account drop down. You’ll then be prompted for your Username and Password. You can also create a “friendly name” for the account.

For example, if you were setting up a connection to your wife’s computer, you’d have to give her full user name, perhaps it’s her e-mail address. In the friendly name could just enter “She who must be obeyed’s computer”.

One nice thing Microsoft Remote Desktop does is save your credentials. Then when you add more computers that use these same credentials you can just pick it from the User account drop down and not have to recreate them every time. This is especially nice for when you use your same Microsoft credential to login to multiple Windows computer.

Once you add the user account, or leave it at the default to ask each time, you’re ready to look at some of the options in Remote Desktop. It’s worth your time to understand these, as it will affect your experience when working with remote computers.

Friendly name can be helpful if the computer has a cryptic name. Often when a PC is purchased the default name is something like WINRPXM457JB. Most home users don’t realize they can rename their computer and leave it at the default. Using the friendly name you can enter “She who must be obeyed’s computer” and know what machine it is.

I find this even more helpful in work environments where they use naming conventions like “HR-PC-001”, “HR-PC-002”, etc. You could instead use meaningful names like “Anna’s computer”, “Jack’s computer”, or “The nice lady who brings us donuts computer”.

If you have a lot of computers you connect to, you may want to group them. By default, there’s one group “Saved PCs”. You may want to create groups such as “My computers”, “Wife’s computers”, “Kid’s computers” and so on. This is totally optional, but the more computers you need to work with the more useful it will become.

The Gateway option is used in corporate environments that have setup Remote Desktop Gateway servers. Since this article is geared toward home users, it shouldn’t affect you. If you are in a corporate environment and need to remote in, your friendly neighborhood system administrator will be able to tell you if you need a gateway, and if so what do you need to enter here.

The other options are pretty straight forward, so let’s click on the Display tab.

Display Options

Here you have some choices on how the remote machine is displayed on your Mac. One notable one is “Use all monitors“. If your Mac has multiple monitors connected to it, you may want to have the remote computer displayed on all of them. To do so, check this box. If you do some of the other options become disabled.

Alternatively, you may want the remote computer only on one monitor so you can still access your Apple computer on the other monitors. Leaving this unchecked allows this.

If you don’t select Use all monitors, you then have the choice to start the remote session in full screen, or show it in a window.

Next up are quality settings, such as the color depth or optimizing for Retina displays. Note that the higher settings you pick, the more bandwidth and processing power it will take.

In my selection, shown above, I chose to use all monitors at a high quality. Make your own selections then click on the Devices & Audio tab.

Devices & Audio Options

This tab controls what gets shared between the host computer, your Mac, and the remote computer (typically a Windows computer).

If, for example, you started a video playing on your remote computer, the “Play sound” option controls where you hear the audio. The default, On this computer simply means the Mac running Microsoft Remote Desktop.

I generally go with the default options, shown here, then go to the Folders tab.

Folder Options

Using the folders tab, you gain the ability to transfer files between your Mac and the computer you are remote controlling.

Start by checking the “Redirect folders” option. Then in the lower left click the + button. In the dialog that pops up, select one of the folders on your Mac. After you’ve connected to your remote computer, this will show up as a folder in your remote computer. Here’s what it looks like on Windows, after you have remoted in.

You’ll see the name of the folder you picked, in this example the Documents folder, the text on my, then the name of your Mac, in this case represented by <my mac>.

From here you can double click to open the Mac’s folder in File Explorer, and begin copying files back and forth. Do note there is a “Read Only” checkbox in the Add PC dialog’s folder options. If you check it, on the Windows computer you connect to will be able to read and copy files from the Mac, but will not be able to copy files to the Mac.

Using redirect folders is optional, and only needed if you wish to move files between the two computers. To be honest, I seldom use this option as I’m a heavy user of Microsoft OneDrive.

If I need something, I simply save it into my OneDrive on the remote computer, then I can open it in my OneDrive folder on my Mac, and vice versa. If you aren’t a user of OneDrive or a similar service then this will be a useful tool for you, should you need to share files.

OK, you’re all done, just click the Add button. This computer will now be added to your Microsoft Remote Desktop window.

Connect To a Remote PC

You can connect by simply double clicking on the block with the computer’s name (in this example represented by <name>).

Note the two icons in the upper right of the computer box. The pencil icon can be used to edit the settings we just saw. The trashcan can be used to remove this computer from your remote desktop application.

When you double click on the computer, you may be shown a message “You are connecting to the RDP host <name>. The certificate couldn’t be verified back to a root certificate. Your connection may not be secure. Do you want to continue?

If you are connecting to your own computer, that you trust, likely on your home network, then you can click the Continue button. In a future post we’ll show you how to resolve this so it will skip this dialog.

Once you have connected, you’ll see the remote computer, probably full screen (unless you changed the property back in the Display options).

Exiting a Remote Desktop Session

I will say, it’s not at all intuitive how to switch back to your Apple macOS desktop, or how to exit a remote desktop session once you are in it. Since I’ve shown you how to get into a remote desktop session, I should take a moment and show you how to get out of it.

To switch back to your macOS machine, simply use the CTRL key, plus the left arrow to swap to the previous desktop. Using CTRL plus right arrow will go back to the Remote Desktop session.

If you are using the virtual desktops feature in macOS, you can use CTRL and the left or right arrows to move past the remote desktop session to other macOS virtual desktops, then go back to the remote desktop.

To exit a remote desktop session, while you are looking at your remote computer simply drag your cursor to the very top of the screen and let it sit there a few seconds.

The Apple menu bar will pop up. You can then use the Window menu, and click Close. Alternatively you can click the Red X button in the Remote Desktop window to close the session.

Also note it’s possible to connect to multiple computers at the same time. You can use either the CTRL and left/right arrow to swap between them, or in the Window menu pick a different remote desktop to connect to.

Network Connectivity

Please note that both the Apple Mac and the computer you are remoting to must be on the same network. Typically this will be your home network, or perhaps a work network.

By default, Remote Desktop won’t work if, for example, you go to a coffee shop with your Mac and your Windows computer is still at home.

It is possible to work around this by setting up a VPN connection back to your home network. Setting that up, however, is beyond the scope of this already long blog post.

Summary

In this post, you saw how to install and configure Microsoft Remote Desktop on Apple’s macOS and connect to a Windows Computer. The screen captures were from macOS Big Sur and Windows 10, but I’ve also tested it with Catalina and Mojave.

Closing All Finder Windows at Once in Apple macOS

It’s not uncommon for me to have multiple Finder windows open at once on my Mac. Often I’m cleaning up my drive, moving files from downloads to where I want them.

When I’m done, I naturally want to close all my Finder windows. Normally, if you go to the File menu in Finder, you’ll see an option to close the current window.

It can be annoying, and potentially time-consuming to go to every Finder window and close it. Even if I close using the red X button, I still have to go to each Finder window. It’d be nice to just close them all at once.

This is yet another instance where the OPTION key will be our friend. Simply hold down the OPTION key and the menu option will update.

You can simply click Close All and all open Finder windows will be exited. Alternatively, you can also press CMD+OPTION+W on the keyboard and all your Finder windows will be closed.

As an added bonus, this not only works in Finder but with any application that allows you to have multiple copies of the program open. For example, I opened up multiple copies of BBEdit and using the OPTION key enabled the Close All Windows choice. Do note though, the shortcut key may vary with each application.

This technique works on Big Sur, Catalina, and other recent versions of Apple macOS.

Skip The Countdown When Shutting Down Apple macOS

I’m sure any macOS user knows how to shut down their Apple computer. Just go to the Apple menu in the upper left, click on it, and pick Shut Down…

Doing so pops up a dialog with a count down timer. You can skip the 60 second count down timer by clicking the Shut Down button.

It’s possible though to skip this dialog and shut down your Mac immediately. The trick to this is, as with my previous blog post, using the OPTION key.

With the above menu open, simply hold down the OPTION button. When you do the menu updates.

The change is very subtle, so look closely. The three periods after “Shut Down” disappear. Now when you click shut down, the shut down dialog is by-passed. Your macBook will now shut down immediately.

This technique works on Big Sur, Catalina, as well as several previous versions of macOS.

Moving A File in Apple macOS

I’ve been using Windows since version 2, before that MSDOS all the way back to the earliest version. Thus working in the Microsoft world is very comfortable to me. My earliest exposure to Microsoft was with GWBASIC running on a Radio Shack (Tandy) TRS-80 Model 1.

I’ve been regularly using various distros of Linux for at least five years, perhaps longer, before that I used various UNIX or UNIX based systems. One of the earliest was CP/M on my Commdore 128, or later AmigaOS.

macOS is relatively new to me, I bought my first Mac about 3 years ago. The macOS GUI is very different in terms of commands from Windows or Linux. There are many things that aren’t intuitive to someone coming from another platform. Even though they may seem easy to an experienced Apple user, they took me some time to figure out. I thought I’d spend a few blog post helping out others who are experienced computer users, but relatively new to macOS.

One that befuddled me at first was very simple, moving a file to a different folder. Turns out it’s fairly simple when you know how.

First, open Finder and go to the file you want to move. Right click and pick Copy.

Now go to the folder you want to move the file to. If you right click, you’ll see the Paste option you may have seen before.

Now here comes the secret. Press and hold the OPTION key. When you do, the menu will update.

While the OPTION key is being held down, the Paste option changes to Move Item Here. Click on it and the file will be moved.

As I stated before, this may seem normal to a long time Apple user, but having menus change by holding a key isn’t something normally done in Windows or most Linux distros. As a new macOS user, it never occurred to me to hold down the OPTION key.

Using the OPTION key can unlock all kinds of new menu options, as you will see in upcoming posts.

Note this technique works in Big Sur, Catalina, as well the last several versions of macOS before that.

Exclude A File From Git Source Code Control in VSCode

Like many developers, I use VSCode for my projects. Primarily PowerShell, but also other things like the PHP code used for my ham radio club website or markdown projects.

It can be useful to have extra files, that I don’t need or want to have saved in Git. One example, I often have a “scratchpad.ps1” file. It’s a place I can prototype code, test out ideas, before I copy them into my main project. If this file gets lost, or damaged, I don’t really care as it’s just temporary.

Another example stems from my need to demonstrate code on video, for my Pluralsight courses, or live at SQL Saturdays and code camps. I often need to login to a website or database, and don’t want to have my credentials hard coded in my script for everyone to see.

To solve this, I simply place my needed information in a text file, then use Get-Content (with the -Raw switch) to read it into a variable. I don’t want this text file though to be placed in my public github repositories.

Excluding a file is simple. In the root folder of your source controlled project is a folder named .git. (Note the period on the front, also note that on some operating systems it may be hidden by default.) Under it is another folder called info.

In .git/info is a file called exclude (with no extension). To it, simply add the names of the files you want to exclude from source control. Here’s an example:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
uid.txt

The lines that begin with a pound sign (#) are comments, and are included by git.

Under it is the file I added, uid.txt. This file is will now be excluded from any git commits, and will not be uploaded to github or whatever tool you use for git. You can see this in the VSCode file tree, the file will appear in an off color font. In a dark mode theme, this will be a gray.

The arrow points to the uid.txt file that was excluded from the project.

That’s all there is to it. Now you can include extra files, such as scratch pads, notes, or even passwords that you don’t need (or want) to have as part of your git repository. Just keep in mind it’s your responsibility to back these files up.

Suppress Write-Verbose When Calling A function in PowerShell

In a project for one of my recent Pluralsight courses, “Everyday PowerShell for Developers on Linux, macOS, and Windows“, I had created some functions in my DataFabricator module. Some of these called many child functions.

I wanted to be able to call the parent function using Verbose in order to track progress. As you may be aware though, when you call a parent function using Verbose, it carries down to all of the functions it calls. This caused a large volume of verbose messages making it difficult to find the information I wanted. Hence I needed to suppress verbose in the called functions.

Let’s see how. First let’s create two simple functions that don’t suppress verbose messages.

function Parent1()
{
  [CmdletBinding()]
  param()

  Write-Verbose "Verbose: Parent1"
  Write-Host "Parent1"
  Child1
}

function Child1()
{
  [CmdletBinding()]
  param()

  Write-Verbose "Verbose: Child1"
  Write-Host "Child1"
}

When we call the parent function with the verbose switch, we get the expected output.

Parent1 -Verbose

VERBOSE: Verbose: Parent1
Parent1
VERBOSE: Verbose: Child1
Child1

Now let’s create an alternate version of the parent function. To suppress verbose on a called child function, all that is needed is to add the verbose switch, but followed by a colon and a $false.

function Parent2()
{
  [CmdletBinding()]
  param()

  Write-Verbose "Verbose: Parent2"
  Write-Host "Parent2"
  Child1 -Verbose:$false
}

Here is the output when we call the new Parent2.

Parent2 -Verbose

VERBOSE: Verbose: Parent2
Parent2
Child1

As you can see, the verbose statements in the Child1 function do not trigger. All that was needed was to add “-Verbose:$false” as a switch when calling Child2.

And that’s all there is to it, using this simple technique you can suppress verbose messages when calling a child function, whether verbose was used to call the parent or not.

Adjust the Screen Resolution of an Ubuntu Hyper-V Virtual Machine

I use Ubuntu for a lot of the courses I teach, due to its popularity. While I have some computers running it “bare metal” as they say, in order to test different scenarios, as well as record my Pluralsight courses, I also setup virtual machines within Hyper-V.

It’s a bit annoying though, as it doesn’t seem to allow the guest extensions to easily resize the VM. (I create my VMs from the downloaded ISOs as opposed to using the pre-built images in the Hyper-V store). But it can be done! All you need is a few quick edits to the grub file.

Start by opening up a terminal window. Then you can use your favorite editor to open the grub file. I’m using VIM in this example, but you could substitute nano or another text editor of your choice. (I’ll assume you know how to use your editor to edit and save changes.)

sudo vim /etc/default/grub

Now scroll down and find the line that begins with GRUB_CMDLINE_LINUX_DEFAULT. To the end of it, append the following string:

video=hyperv_fb:1280x720

Or use 1920×1080, 2560×1440, or whatever resolution you prefer. The line should look something like the following, all on one line without any wrapping.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video=hyperv_fb:1280x720"

Looking good, but you’re not quite done yet. You’ll need to append the same to the next line so it looks similar to the following, again all on one line with no wrapping.

GRUB_CMDLINE_LINUX="quiet splash video=hyperv_fb:1280x720"

Of course, you’ll want to make sure the resolution you select matches on both lines, 1920×1080, etc.

Now save the contents and exit your editor.

Next, and this is an important step, you have to update grub using the following command:

sudo update-grub

If you skip this step, you won’t see your resolution updated.

Finally, you’ll need to reboot. I’ve not had great success with doing a reboot of Ubuntu running in Hyper-V, it frequently hangs, so I suggest doing a power off, then start Ubuntu again in Hyper-V.

When it does reboot, you should be running at your new resolution.

Fixing the Failed To Acquire Token Error When Logging Into Azure from PowerShell

When I haven’t used Azure from PowerShell in some time, I’ll get an error “failed to acquire token” when using cmdlets such as Get-AzSubscription or Get-AzContext.

To add to the confusion, sometimes Connect-AzAccount appears to work and log me in, but I’ll still get the error.

Under the hood, the Azure cmdlets are caching some connection tokens. Fixing this issue is pretty simple, although not intuitive or easy to find the solution. All you have to do is issue the following cmdlet:

Clear-AzContext

This will remove old tokens from your system.

After issuing the clear command, just end your current PowerShell session, then login again using Connect-AzAccount and you should be good to go.

SQL Server 2016 Reporting Services Cookbook On Sale Until Jan 13, 2021

My last book, SQL Server 2016 Reporting Services Cookbook, is on sale until January 13th, 2021.

You can get the E-Book version for just $5 (US) when ordering direct from my publisher.

Now you may be thinking, “2016? That’s oooooold!” But in fact little has changed in Reporting Services since the 2016 release. All of the topics and techniques are still just as valid in SQL Server 2019.

To order your copy of the book, just jump on over to SQL Server 2016 Reporting Services Cookbook | Packt (packtpub.com)

Hurry though, offer is only good until January 13, 2021

Iterate Over A Hashtable in PowerShell

Iterating over an array in PowerShell using a foreach loop is pretty simple. You might think you can do the same thing with a hash table using the same syntax, but if you do you’ll get nothing back.

It is possible to loop over a hash table though, using one of two methods.

First, let’s create a simple hashtable.

$hash = @{
'About Arcane Code' = 'http://arcanecode.me'
'ArcaneCode Blog' = 'https://arcanecode.com'
'ArcaneCode RedGate Articles' = 'http://arcanecode.red'
'ArcaneCode Github Repository' = 'http://arcanerepo.com'
}

In the first method, the one that I prefer, you can use the GetEnumerator method of the hash table object.

foreach ($h in $hash.GetEnumerator() )
{
  Write-Host "$($h.Name) : $($h.Value)"
}

Within the loop, you can use the Name property to get the key part of the hash, and the Value property to retrieve the value. Here is the output:

ArcaneCode Blog : https://arcanecode.com 
ArcaneCode Github Repository : http://arcanerepo.com 
About Arcane Code : http://arcanecode.me 
ArcaneCode RedGate Articles : http://arcanecode.red

In the second method, instead of iterating over the hash table itself, we loop over the Keys of the hash table.

foreach ($h in $hash.Keys) 
{
  Write-Host "$h: $($hash.Item($h))"
}

For each key, we retrieve it’s value from the hash table using the key to indicate the item we want. We could have shortened this slightly, but skipping the Item and just referencing the value by the key, using this syntax:

foreach ($h in $hash.Keys) 
{
  Write-Host "$h: $($hash.$h)"
}

Both of these methods produce the same output as our original version.

ArcaneCode Blog : https://arcanecode.com 
ArcaneCode Github Repository : http://arcanerepo.com 
About Arcane Code : http://arcanecode.me 
ArcaneCode RedGate Articles : http://arcanecode.red

There you go, two simple ways in which you can iterate over a hash table in PowerShell. As I indicated, I prefer GetEnumerator because I have access to both the key and the value in a single variable within my loop. But feel free to use the method that works best for your situation.

Two New PowerShell Courses for Developers on Pluralsight

I’m proud to announce I have not one but two, yes TWO new PowerShell courses available on Pluralsight, targeted for developers. These two courses are designed to work in harmony, to show developers how they can leverage PowerShell to automate and assist in their daily work.

The first is “PowerShell 7 Quick Start for Developers on Linux, macOS, and Windows”. It leverages your knowledge as a developer to bring you up to speed on the PowerShell language. It doesn’t waste time explaining concepts you already know, like variables and loops. It simply shows you how to do things in PowerShell.

The second course is “Everyday PowerShell for Developers on Linux, macOS, and Windows”. It begins showing how to combine PowerShell with Docker to create a PHP container and test a simple website. It then proceeds to create an Azure SQL database and load data in it.

In the second you are taught how to code your own classes and modules by creating a simple module that leverages a USPS website API to lookup a zip code and return the city and state it belongs to.

In the final part of the course you are shown how to use the new DataFabricator module to generate realistic looking, but fake data for use in testing your applications.

While originally developed with PowerShell 7.0.3, all code in the course was tested and videoed using PowerShell 7.1.0.

Additionally, the code was tested on a variety of platforms, including Ubuntu 20.04, 20.10, Windows 10, H1 and H2, macOS Catalina and even macOS Big Sur.

If you don’t have a Pluralsight subscription, just go to the Pluralsight page and click the Try for Free link to get a free 10 day trial.

VSCode User Snippets for PowerShell and MarkDown

I’ve been working a lot on a new course for Pluralsight, Everyday PowerShell 7 for Developers. I’ve been cranking out a lot of code as a result, PowerShell, obviously, as well as Markdown for documentation.

I’m finding the use of VSCode’s User Snippets to be extremely useful for developing this course. Snippets have allowed me to store my most often used code as templates, quickly manifesting new sections of code.

In PowerShell I’m finding these especially useful for writing Pester tests. Most tests fall into a few simple patterns, using a snippet I can quickly create the bulk of my test, leaving me to fill in the few remaining pieces.

If you know Markdown, you know some of the syntax can be a bit arcane. Using snippets makes it easy to insert commonly used ones, such as being able to type in a snippet name of mdlink and get the correct syntax to appear for a hyperlink.

It also helps with consistency. A small example, for doing italics in Markdown, you can use a singe underscore or a single asterisk. For bold, two underscores or asterisks.

I decided (for no particular reason) to use underscores for italics and asterisks for bold. If it’s been a while since I wrote Markdown though, I may not always remember. So I setup mditalic and mdbold to insert the correct formatting for me.

I’ve placed my snippets in a repository on my github site:

https://github.com/arcanecode/VSCode_User_Snippets

If you aren’t familiar with how to use User Snippets, I have a quick overview in a Markdown file in the repository.

Speaking of Markdown, there is one issue with VSCode. By default, intellisense is not enabled in VSCode for Markdown. While snippets can be used without intellisense, it’s much easier to use them with intellisense turned on.

In the repository I have a Markdown  file with information on how to turn intellisense on in VSCode for Markdown files.

Be aware there are also user snippets available through the Extensions Marketplace in VSCode. Just go into the Extensions, and enter Snippet into the search bar.  I just didn’t happen to find any that quite suited my needs, hence I created my own.

You’re welcome to copy and use the user snippets, just some or all of them, as you need. Do be aware some of them have my name and websites, such as the author info snippet I use for the bottom of all my Markdown files, or the header snippet for the top of my PowerShell files.

I hope you find user snippets as helpful as I do.