###########################
# Write output and commands to text file DOS and PS
#########################
REM Check Version of spfx related packages and save to a file
node --version >> C:\temp\Logs\cmdPrompt.log
npm --version >> C:\temp\Logs\cmdPrompt.log
pnp --version >> C:\temp\Logs\cmdPrompt.log
yo --version >> C:\temp\Logs\cmdPrompt.log
gulp -v >> C:\temp\Logs\cmdPrompt.log
nvm ls >> C:\temp\Logs\cmdPrompt.log
choco --version >> C:\temp\Logs\cmdPrompt.log
type C:\temp\Logs\cmdPrompt.log
REM save command output to a file and command error output STDERR and STDOUT
choco --version 1>> C:\temp\Logs\cmdPrompt.log 2>&1
REM View file in cmd
type C:\temp\Logs\cmdPrompt.log
REM Save commands to append to a file
doskey /history >> C:\temp\Logs\cmdPrompt.Commands.log
REM Copy the Command Output to Windows Clipboard
REM ould copy the details of your network connections to the clipboard:
ipconfig /all | clip
REM opy the contents of a folder to the clipboard
dir | clip
# Powershell save commands + output
# ps output to a file, output to a text file with PowerShell on Windows 11 or Windows 10,
ipconfig | Out-File -FilePath C:\temp\Logs\cmdPrompt.log
#view the saved output on the screen
Gt-Content -Path C:\temp\Logs\cmdPrompt.log
# saving BOTH the commands you type AND all their output? I'm not talking about piping the output of any one to a file, like above. Instead, this is about the PowerShell Start-Transcript cmdlet. Try it out some time:
Start-Transcript
# Without any parameters, the transcript will be saved in the user’s documents folder, filename will automatically be generated and consists of the device name, random characters
#e.g:
# c:\users\name\documents\PowerShell_transcript.DEVICENAME.qp9EOTN2.20220301132612.txt
# Start recording
Start-Transcript
# stop recording
Stop-Transcript
# start options
# Append to a log file.
Start-Transcript -Path C:\temp\Logs\cmdPrompt.log -Append
#use -NoClobber prevent overwriting file
Start-Transcript -Path C:\temp\Logs\cmdPrompt.log -NoClobber
# -OutputDirectory parameter. This way we can specify the directory where we want to store the log file
Start-Transcript -OutputDirectory C:\Temp\Logs
# Result:
Transcript started, output file is C:\Temp\Logs\PowerShell_transcript.WIN11-LAB02.uftVAXsv.20220301045218.txt
# limit the header information to only a timestamp o
Start-Transcript -OutputDirectory C:\Temp\Logs -UseMinimalDeader
# E.g:
**********************
PowerShell transcript start
Start time: 20220301135543
**********************
# See also: https://itluke.online/2019/03/24/what-is-captured-with-powershell-transcripts/ for Verbose+Debug levels
# See also: https://4sysops.com/archives/powershell-transcript-record-a-session-to-a-text-file/
###########################
# Get Versions
#########################
# PS get version of Spfx imprtant packages
node --version
npm --version
pnp --version
yo --version
gulp -v
nvm ls
choco --version
winget --version
# get version of Powershell
host
# or
$PSVersionTable
$PSVersionTable.PSVersion
# get the value of the PowerShellVersion parameter in the registry key
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion
#Version of PowerShell on Remote Computers
Invoke-Command -ComputerName 192.168.1.15 -ScriptBlock {$PSVersionTable.PSVersion} -Credential $cred
# get version of .Net + .Net Core
# versions of the .NET SDK are currently installed with a terminal
dotnet --list-sdks
(dir (Get-Command dotnet).Path.Replace('dotnet.exe', 'sdk')).Name
# which versions of the .NET runtime
dotnet --list-runtimes
(dir (Get-Command dotnet).Path.Replace('dotnet.exe', 'shared\Microsoft.NETCore.App')).Name
# dotnet core installed runtimes and SDKs, as well as some other info:
dotnet --info
# .NET Framework
# get from https://github.com/jmalarcon/DotNetVersions/releases save to C:\Windows\System32 or PATH
dotnetversions -b
# security updates and hotfixes that are installed on a computer using PowerShell:
$DotNetVersions = Get-ChildItem HKLM:\SOFTWARE\WOW6432Node\Microsoft\Updates | Where-Object {$_.name -like
"*.NET Framework*"}
ForEach($Version in $DotNetVersions){
$Updates = Get-ChildItem $Version.PSPath
$Version.PSChildName
ForEach ($Update in $Updates){
$Update.PSChildName
}
}
# Get CLR versions
# displays all the versions of the CLR installed on the computer. dl Clrver.exe (CLR Version Tool)
clrver
# get version of VS Code / Visual Studio
code --version
nuget help | select -First 1
dotnet nuget --version
# change based on version to be checked
(Get-Item "${env:ProgramFiles(x86)}\Microsoft Visual Studio 11.0\common7\ide\devenv.exe").VersionInfo.ProductVersion
# get paths to GAC
gacutil.exe -l
# get version of PnP
# get version of Spfx
REM DOS Get
Version of spfx related packages and save to a file
node --version >> C:\temp\Logs\cmdPrompt.log
npm --version >> C:\temp\Logs\cmdPrompt.log
pnp --version >> C:\temp\Logs\cmdPrompt.log
yo --version >> C:\temp\Logs\cmdPrompt.log
gulp -v >> C:\temp\Logs\cmdPrompt.log
nvm ls >> C:\temp\Logs\cmdPrompt.log
choco --version >> C:\temp\Logs\cmdPrompt.log
type C:\temp\Logs\cmdPrompt.log
###########################
# Get Install Folders
#########################
# get install location of powershell
###########################
# Update ps, choco,
#########################
#update ps core
iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"
# or
winget install PowerShell
O365, SharePoint, Android, C# , SQL , Software Development, Office Productivity, Visual Studio, Business Intelligence, Software Engineering , JavaScript , JQuery , Web Service, JS & .Net FW FUN!
Sunday, July 17, 2022
Utility Powershell and Dos Commands: Save Output and Commands to file, Get Versions, Get Folder, Update Common Packages
Thursday, July 7, 2022
Convert Gif to MP4 via ffmpeg
The below command can be used to convert a GIF to an MP4 using the pre-requsite ffmpeg app on Windows:
1. Open notepad, create a bat file : e.g: "fmpg.bat"
2. Add the following : replace paths as needed:
cd [PathToFFMpeg]\FFMpeg\bin
echo fn %~n1
echo INFILE- %1
echo OUTFILE- [PathOutput]\%~n1.mp4
ffmpeg -i "%1" -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" [PathOutput]\%~n1.mp4
Usage:
fmpg "C:\MyGifs\1.gif"
Tuesday, May 17, 2022
Azure Microsoft Graph Explorer Permissions : How to resolve "Application must have one of the following scopes" Error
Symptoms:
When using the MS Graph Explorer in Azure:
If you recie b an eeor with the follwing substring text in the error message:
"Application is not authorized to perform this operation. Application must have one of the following scopes:"
For example:
Url:https://graph.microsoft.com/beta/deviceManagement
Response:
{
"error": {"code": "Forbidden",
"message": "{\r\n \"_version\": 3,\r\n \"Message\": \"Application is not authorized to perform this operation. Application must have one of the following scopes: DeviceManagementConfiguration.Read.All, DeviceManagementConfiguration.ReadWrite.All - Operation ID (for customer support): 00000000-0000-0000-0000-000000000000 - Activity ID: 5c977c7f-ae03-4be0-82c2-408eafb65caf - Url: <
https://fef.msub05.manage.microsoft.com/DeviceConfiguration_1911/StatelessDeviceConfigurationFEService/deviceManagement?api-version=5019-09-20>\",\r\n \"CustomApiErrorPhrase\": \"\",\r\n \"RetryAfter\": null,\r\n \"ErrorSourceService\": \"\",\r\n \"HttpHeaders\": \"{}\"\r\n}","innerError": {
"request-id": "5c977c7f-ae03-4be0-82c2-408eafb65caf",
"date": "2019-11-15T18:53:00"
}
}
}
Resolution:
Sign in to the Azure portal, go to Azure Active Directory > Enterprise Applications, and then select Graph explorer from the list of applications. For example for me : Enterprise Application is at this url
Click "Graph Explorer"
Click Permissions
Search for, Add and then Grant the permission that we want Graph Explorer to execute without error:
With our permission added, we can now execute without error:
- Execute:
Sunday, May 1, 2022
Get Powershell Version : various methods to get the version of Powershell
There are numerous ways to do the same thing in Powershell. In this post, we will go over every way to check the PowerShell version. All these ways should work in both Windows PowerShell and PowerShell Core.
Here are the ways to get the version of PowerShell :
- The $host.Version property
- The (Get-Host).Version property
- The $PSVersionTable.PSVersion property
- The registry (Windows PowerShell only)
Another method is getting the Powershell version from a remote computer:
Invoke-Command -ComputerName 10.0.0.5 -ScriptBlock {Get-Host} -Credential $cred
results in for example:
Using $host and Get-Host command
$host.Version on Remote Computers
You will see the same behavior via PowerShell Remoting with $host.Version as you will running Get-Host.
Invoke-Command -ComputerName 10.0.0.5 -ScriptBlock {$host.Version} -Credential $cred
Registry
If you don’t want to open up PowerShell itself, you can also check the registry. The version of PowerShell is tucked away under a value in the registry key path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine. This registry key has a value called PowerShellVersion that you can reference by using Get-ItemProperty.
(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion 5.1.17134.1
Also WMI:
reg query HKLM\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine /v PowerShellVersion HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine PowerShellVersion REG_SZ 5.1.17134.1
Registry on a remote computer:
$scriptBlock = { [version](Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion } PS51> Invoke-Command -ComputerName 10.0.0.5 -ScriptBlock $scriptBlock -Credential $cred
Version via $PSVersionTable.
PSVersion property on the $PSVersionTable automatic variable. This method will always represent the PowerShell engine.





