Press "Enter" to skip to content

Tag: microsoft

Techy: Microsoft PowerShell and Linux Commands

I’m finding myself mix and matching between GNU/Linux and Microsoft PowerShell quite a bit at the moment and which most Linuxy/Linuxesque (?) commands work fine under PowerShell, some are a little bit different.

Here’s a few which may be handy to know (the only order is that which I entered them). I’ve also added a couple of Windows commands where they are slightly easier to remember/shorter than PowerShell – and, me being me, included links to the appropriate documentation where possible.

Linux CommandPowerShell CommandDescription
which <commandname>
Example:
which composer
GNU Logo GNU “which”
Get-Command <commandname>
Example:
Get-Command composer
Powershell Logo PowerShell “Getting Environment Variables”
Find the location of an executable called <commandname>
In PowerShell, Get-Command can be referred to as just “gcm” so the example would become “gcm composer
printenv
GNU Logo GNU “printenv”
Get-Item -Path Env:
Powershell Logo PowerShell “Getting Environment Variables”
List all environment variables.
PowerShell also supports using “ls” to list environment variables – such as “ls env:
<variablename>="<value>"
Example:
HELLO="you guys"
Set-Item -Path Env:<variablename> "<value>"
Example:
Set-Item -Path Env:HELLO "you guys"
Powershell Logo PowerShell: “Change the value of an environment variable”
Sets an environment variable called <variablename> to the text <value>

PowerShell also supports using “$env:<variablename>="<value>” ” – such as ” $env:HELLO="you guys"
echo $<variablename>
Example:
echo $PATH
GNU Logo GNU “echo”
Get-ChildItem -Path Env:<variablename>
Example:
Get-ChildItem -Path Env:PATH
Powershell Logo PowerShell “Get A Selected Environment Variable”
Show the value of an environment variable called <variablename>
PowerShell also supports using “ls” to list environment variables – such as “ls env:PATH

echo <text>
Example:
echo "Hello there!"

GNU Logo GNU “echo”
Write-Output <text>
Example:
Write-Output "Hello there!"
Powershell Logo PowerShell “Write-Output”
Displays/prints a <text> string to the terminal
grep "<string>" <file>
Example:
grep "sort code" document.txt
GNU Logo GNU “grep”
Select-String "<string>" <file>
Example:
Select-String “sort code” document.txt
Powershell Logo PowerShell “Select-String”
Search a file <file> for the given text <string> using a regular expression

grep "<string>" <file>
Example:
grep "sort code" document.txt
GNU Logo GNU “grep”
findstr /R "<string>" <file>
Example:
findstr /R "sort code" document.txt
Windows LogoWindows Command: “findstr”
Search a file <file> for the given text <string> using a regular expression

ls | grep "<string>"
Example:
ls | grep "\.html"
GNU Logo GNU “ls”
ls | Out-String -Stream | Select-String "<string>"
Example:
ls | Out-String -Stream | Select-String “\.html”
Powershell Logo PowerShell “Select- String: Convert Pipline Objects”
Search a directory listing for a filename containing <string> using a regular expression
ls | grep "<string>"
Example:
ls | grep "\.html"
GNU Logo GNU “ls”
dir | findstr /R "<string>"
Example:
dir | findstr /R "\.html"
Windows LogoWindows Command: “findstr”
Search a directory listing for a filename containing <string> using a regular expression.
wget <url> --output-document <filename>
Example:
wget https://h.tld/f.gif --output-document o.gif
GNU Logo GNU “wget”
Invoke-WebRequest <url> -OutFile <filename>
Example:
Invoke-WebRequest https://h.tld/f.gif -OutFile o.gif
Powershell Logo PowerShell “Invoke-WebRequest”
Save a file at a URL <url> as a local file called <filename>
\
(backslash)
Example:
a \
b
GNU Logo GNU “The Backslash Character”

(backtick)
Example:
a
`
b
Powershell Logo PowerShell “…Line Continuation in Code…”
Allows a command to be split across multiple lines using the multiline separator/line continuation character.
&&
Example:
echo "A" && echo "B"
GNU Logo GNU “Lists
&&
Example:
Write-Output "A "&& Write-Output "B"
Powershell Logo PowerShell “Pipeline Chain Operators”
Command chaining using pipeline operators/list operators – if the condition on the left is true/passes, then continue.
rm <file>
Example:
rm test.tmp
GNU Logo GNU “rm”
Remove-Item <file>
Example:
Remove-Item test.tmp
Powershell Logo PowerShell “Remove-Item”
Deletes a file called <file>
unzip <file>
Example:
unzip myfile.zip
Expand-Archive <file>
Example:
Expand-Archive myfile.zip
Powershell Logo PowerShell “Expand-Archive”
Extracts a .zip archive file
uname
Example:
uname -nrmo
GNU Logo GNU “uname”
(note, the output order of uname in GNU/Linux cannot be altered)
Get-ComputerInfo
Example:
Get-ComputerInfo -Property CsDNSHostName, OsVersion, OsArchitecture, OsName | ConvertTo-Json
Powershell Logo PowerShell “Get- ComputerInfo”
Powershell Logo PowerShell “ConvertTo-Json”
Gets basic information about the system. For example:
Computer’s “hostname”
[GNU:n PS: CsDNSHostName]
OS or kernel release
[GNU: r PS:OsVersion]
Machine/Processor type
[GNU:m PS:OsArchitecture]
Operating system (OS) name
[GNU:o PS: OsName]
These commands were testing on a Debian bullseye Linux virtual machine and using Microsoft PowerShell 7.2 on Windows 10.

Microsoft PowerShell – don’t you mean Windows PowerShell?

Nope.

If you have a Windows 11, 10, 8.1, 8.0 or 7 machine, it would have come “with default” with Windows PowerShell – however, Microsoft has replaced that with a new “multiplatform” version which – in their infinite wisdom – have decided to call Microsoft PowerShell but haven’t “forcibly upgraded” people (you can upgrade yourself via their “Installing PowerShell on Windows” guide).

Microsoft do have a webpage about the differences between the PowerShells if you want to read: but if you use the command line a lot, it might be worth looking at Windows Terminal as well.

Which version of PowerShell do I have?

If you type/copy:

(Get-Host).Version

into the shell, you’ll get:

  • A “Major” version number of 7 or above = (new) Microsoft PowerShell
  • A “Major” version number of 5 or lower = (old) Windows PowerShell
  • A “Major” version number of 6 = I don’t think this actually exists and therefore should be used as the “cut-off” point between the two.
  • “.Version was unexpected at this time” = Probably using Windows Command Prompt
  • “-ash: syntax error: unexpected word” = You are in a shell of a Linux machine!
  • “bash: syntax error unexpected token `.Version’ = Linux again!

Real Life Example

As an example, here’s a single line Linux “command script” which uses curl to fetch a page from https://api.example/latest , parse it for the first occurrence of the text:

"tag_name":"v..."

(where v…. is any sequence of characters starting with “v” and ending with a quote mark) and store that as $VERSION then pass that to curl again to download that specific version zip file from https://example.com/v${VERSION}.zip as “example.zip” (replacing ${VERSION} with the extracted version number), unzip it and then delete the downloaded .zip file.

And, yes, I’ve colour coded the appropriate sections so you can see which command “maps” to which other command.

Linux Example

VERSION=$(
 curl --silent "https://api.example.com/latest" | \
 grep '"tag_name":' | \
 sed -E 's/.*"v([^"]+)".*/\1/' \
) && curl -L https://example.com/v${VERSION}.zip -o example.zip \
&& unzip example.zip && rm example.zip

Windows PowerShell 7 Example

if (((Invoke-WebRequest "https://api.example.com/latest").Content) -match '"tag_name":"v(?<ver>[^"]+)"') {
$VERSION=$Matches.ver &&
Invoke-WebRequest "https://example.com/v${VERSION}.zip" -OutFile example.zip &&
Expand-Archive example.zip && Remove-Item example.zip }

Techy: IE8 incompatible list: What isn’t listed?

Zdnet has just pointed me towards Microsoft’s Internet Explorer 8 Compatibility View List for Windows Vista which lists all the websites IE 8 is known to have problems with: and it’s extensive (see this Zdnet list for a human-readable display). I did a quick search for most of the major sites and they all seem to be listed: From Microsoft.com (if they can’t get their own site working in their own software it doesn’t bode well), all Amazon sites (.com and .de, .cn and .co.uk etc), all major social networking sites (Facebook.com, MySpace.com, LinkedIn.com and Twitter.com are all listed), to all of Google, bbc.co.uk, Paypal.com , all of eBay and many many more. And this is only the 2,400 major sites that Microsoft have found to have problems with IE8 (or should that be: sites that Microsoft have found that IE8 is broken on).

All the more reason to drop Internet Explorer and try Firefox, Safari, Opera or another browser of your choice (mine’s Firefox)

Back To The Keynote… with Christopher Lloyd

Looking at this, this promo was for one of Microsoft’s Tech Ed events in 2007: how it’s failed to come to my attention to now is unknown. Featuring Christopher “Judge DoomDr. Emmett Brown” Lloyd, a certain Delorean, flux capacitor and Acme Inc it’s a good fun 10 minutes…

Now only if Microsoft used something like this for their adverts instead of the failed Seinfield and the “not at all funny, not at all appealing to purchasing managers (who would have probably watched and enjoyed BTTF)” I’m a PC adverts:

B0rken eBay Express

Broken Ebay ExpressI was just poking around eBay earlier and I came across mention of “eBayExpress” and thought it’ll be interesting to sign up. So I tried to – but hit a load of debug information.

Interesting stuff: eBay Express appears to run in PHP (as can be confirmed in the URL), but it runs on Microsoft SQL Server (as can be evidenced by the MS SQL/mssql mentions in the error messages) and they use the “sa” (super administrator) account to login to the MS SQL server: a big no no in any security aware programmer’s book. They also have the web server running on the same server as the database server (as evidenced by the “Unable to connect to server: localhost” section) and they keep everything in nice distinct files. They also have warnings turned on on their server.

Interesting stuff (for a techy like me!).

[added]

Steps to replicate: