Windows 2016 – Hyper-V CheckPoints Disk Space

December 4, 2018

Once you create VM checkpoints in Hyper-V it might start consuming a lot a disk space afterwards.

image

Because it will write data to the AVHDX files.

You can use PowerShell to investigate the current disk size.

Get-VM YourVM | Select-Object VMId | Get-VHD | Select-Object –Property path,computername,vhdtype,
@{label=’Size(GB)’;expression={$_.filesize/1gb –as [int]}}

image

As you can see the VHD Type is saying DIFFERENCING.

That is because you have a checkpoint pending. And this is NOT recommended in a production environment.

There are some tricky scenario’s where deleting checkpoints can corrupt your VM.

See here for more info

Enjoy !

Advertisements

PowerShell Core – Connecting to O365 Exchange Online

July 3, 2018

Now that we have PowerShell running on Windows 10… let’s see if we can get use it to get access to O365 Exchange Online.

 

First you need to load the MSOnline Windows PowerShell  Modules in PowerShell Core.

This is done using these 3 Lines :

Install-Module WindowsPSModulePath -Force -Scope CurrentUser 
 
Add-WindowsPSModulePath

Import-Module MsOnline

 

image

If you don’t use the first 2 lines you will get an error. Because PS Core doesn’t have the MSOline Module available.

So we grab it from the Windows PowerShell.

 

let’s set the credentials

$UserCredential = Get-Credential

image

Next create the remote session to load the module

 

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid -Credential $UserCredential -Authentication Basic -AllowRedirection

Import-PSSession $Session

image

 

Test it using some commands

image

Get-User

image

 

For Mac see here :

https://www.cgoosen.com/2017/03/connecting-to-exchange-online-with-remote-powershell-from-a-mac/

For the other O365 Services see here :

https://www.michev.info/Blog/Post/1954/powershell-core-and-office-365

Enjoy !


PowerShell Core – Running on Windows IoT using a RPI3

July 2, 2018

As mentioned on this post

I was planning to test PowerShell Core on Windows IoT running on an ARM platform using RPI3….

PS Core Version 6.x claims to be a cross platform Smile

It is still experimental as mentioned here :

https://docs.microsoft.com/en-us/powershell/scripting/setup/powershell-core-on-arm?view=powershell-6

So let’s take a look :

1. Download the correct ZIP

https://github.com/PowerShell/PowerShell/releases

Windows IoT running on RPI3 is a 32bit version (if you are using the free version)

image

2. Open the ZIP

This contains all the modules needed to run on your RPI3

image

Extract and copy all files over to your destination RPI3 folder.

 

image

For example c:\pscore

 

3. Setup Remoting on RPI3

Run this command and see PS notes :

You’ll get an error message and will be disconnected from the device because it has to restart WinRM

 

image

 

# Be sure to use the -PowerShellHome parameter otherwise it'll try to create a new
# endpoint with Windows PowerShell 5.1
.\Install-PowerShellRemoting.ps1 -PowerShellHome .
# You'll get an error message and will be disconnected from the device because it has to restart WinRM

 

4. Connect to the PS Core on your RPI3

# Be sure to use the -Configuration parameter.  If you omit it, you will connect to Windows PowerShell 5.1
Enter-PSSession -ComputerName <deviceIp> -Credential Administrator -Configuration powershell.6.0.2

image

 

5. How to run Windows PowerShell modules in PowerShell Core

Run these 2 commands to get access to the Windows PS modules

 

Install-Module WindowsPSModulePath -Force -Scope CurrentUser 

Add-WindowsPSModulePath

 

image

Or this way for a custom module

Import-Module "C:\Program Files (x86)\AutoIt3\AutoItX\AutoItX.psd1"
Get-Command *au3*

 

image

image

6. Test PS Core on your RPI3

image

All runs as expected Smile

 

But keep in mind that not all functions are supported (yet)

image

 

Even if it says so see help Sad smile

image

 

Running PowerShell Core on Linux or Mac see here to get started :

https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-powershell-core-on-linux?view=powershell-6

https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-powershell-core-on-macos?view=powershell-6

Enjoy !


PowerShell Core – Installing and Testing

July 2, 2018

PowerShell Core has reached version 6.1xxx at this moment …

 

Why do you need PS Core v6.1.x

https://blogs.msdn.microsoft.com/powershell/2018/01/10/powershell-core-6-0-generally-available-ga-and-supported/

https://docs.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-core-60?view=powershell-6

https://blogs.msdn.microsoft.com/powershell/2018/01/24/powershell-core-6-1-roadmap/

 

How to install

Since PS Core is a cross platform distribution, just pick the one you need Smile

https://github.com/PowerShell/PowerShell/releases

 

Download and run for a Windows 10 SxS installation

 

image

 

Select Open PS Core

or start is manually

image

Testing

In order to run PS Core you need to use the pwsh.exe commandline and not powershell.exe !

Check the PS Core version :

run pswh.exe –v

image

Or the famous command

$psversiontable

 

image

PowerShell core does not have all the modules of the full blown version available.

But it has already a lot… run

get.command 

it will list about 425 commands

image

 

If you need more :

Windows PowerShell Compatibility Pack

With the announcement of the Windows Compatibility Pack for .NET Core for .NET Core, PowerShell Core will regain some APIs that had been dropped in the transition to .NET Core.  This means we can re-enable some cmdlets that weren’t part of the PowerShell Core 6.0 release: WMI, EventLog, and PerfCounters.  In addition, some highly requested APIs will be available which means that some existing Windows PowerShell modules might just work in PowerShell Core 6.0.  This module will replace the WindowsPSModulePath module to add the Windows PowerShell $env:PSModulePath to PowerShell Core 6.0.  Finally, we can use this module to optionally add back some aliases that we removed from PowerShell Core 6.0 that exist in Windows PowerShell.

Example it allows you to run encrypted commands as well out of the box… Smile

image

 

For a full list of command line options run pwsh.exe /? (or –h or –help or …. Winking smile )

Most relevant are :

pwsh -NoExit -Command Get-Date

image

 

Some of the commands you need to run using Administrator privileges or you get this error :

image

pwsh -Command {Get-WinEvent -LogName security} or pwsh -command “& {Get-WinEvent -LogName security}”

image

 

You can run Windows PowerShell modules in PowerShell Core on Windows

 

Install-Module WindowsPSModulePath -Force -Scope CurrentUser 

Add-WindowsPSModulePath

 

Next episode I will test it the PS Core on an RPI3 running Windows IoT, see here

Enjoy!


PowerShell – Using PoSH SSH Module to access Synology NAS

October 21, 2017

You can now access any SSH device using the PoSH SSH module.

Let’s give it a try using a Synology NAS Device.

Make sure that you enable the SSH Access Service

image

Next make sure you have installed the PoSH-SSH module

Find-Module Posh-SSH

image

Next install it using this command (run as Administrator) :

Find-Module Posh-SSH | Install-Module

After installing you can check the commands available

Get-Command -Module Posh-SSH

image

Now you are ready to make a connection Smile

New-SSHSession -ComputerName YourNASDeviceNAME

image

You can check the session info like this

Get-SSHSession
Get-SSHTrustedHost | fl

image

Let’s run some commands

Invoke-SSHCommand -SessionId 0 -Command "ls -all" | select-Object output -expandproperty output | fl

image

Or using this format :

$result = Invoke-SSHCommand -Index 0 -Command "uname -a; cd /; pwd; ls /volume1" 
$result.Output

image

$result = Invoke-SSHCommand -Index 0 -Command "uname -a" 
$result.Output

image

To stop the session use this command :

Remove-SSHSession -Index 0 -Verbose

image

Enjoy !!


Windows Core IoT – How to check the PowerShell Version and DotNet Version on

December 31, 2016

Just run this command and check your version.

 

image

 

As you can see that Windows 10 IoT core has PSEdition already installed.

Not sure yet if this is the same as DotNet Core ?

 

Best check for regular updates using the Web Interface.

image


Windows Core IoT – Accessing Raspberry PI3 – WMI Classes remotely using WBEM

December 30, 2016

Start using Powershell on Windows IoT on a Raspberry PI3

If you check all the available COM objects that are installed on the Windows 10 Core IoT, we see that WMI and WBEM is installed.

List all COM Objects like this.

image

This enables opportunities for Scripters to connect remote to access all available WMI classes Smile.

But unfortunately I always got an error message like this :

The RPC server is unavailable 0x800706BA

Solution :

First connect using WSMAN to connect to the RPI3 using PS

See my previous post Running Powershell Scripts on Windows 10 Core IoT installed on a Raspberry PI3

image

 

Once the Firewall is set correct, you have the way open to access the WMI classes remotely, without having to first access the local PI3 using WSMAN Winking smile

So let’s test it accessing the EventLogs on Windows IoT

image

Now that we have remote access we can use PS to list all EventLog Errors in a GRID to check what is going wrong.

image

 

All log files are located here :

image

You can also use other Scripting languages like VBScript

strComputer = “rpi3”
Set objSWbemLocator = CreateObject(“WbemScripting.SWbemLocator”)
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
“Root\CIMv2”, _
“rpi3\administrator”, _
“P@ssW0rd”)

Set colItems = objSWbemServices.ExecQuery(“Select * from Win32_ComputerSystem”,,48)

For Each objItem in colItems
Wscript.Echo strComputer & ” responded.”
Wscript.Echo “Manufacturer: ” & objItem.Manufacturer
WScript.Echo “Model: ” & objItem.Model
Wscript.Echo “Status ” & objItem.Status
Wscript.Echo “SystemType: ” & objItem.SystemType
next

image

Or AU3 to remotely access the WMI Classes on the PI3 Smile

image

 

$StrCmp = "rpi3"
$StrUser = "rpi3\administrator"
$StrPswd = "P@ssW0rd"

$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20

Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

$strComputer = "rpi3"
$objSWbemLocator = ObjCreate("WbemScripting.SWbemLocator")
$objSWbemServices = $objSWbemLocator.ConnectServer($StrCmp, "root\cimv2", $StrUser, $StrPswd)


$colItems = $objSWbemServices.ExecQuery("Select * from Win32_ComputerSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

For $objItem in $colItems
          ConsoleWrite($strComputer & " responded." & @CRLF)
          ConsoleWrite("Manufacturer: " & $objItem.Manufacturer & @CRLF)
          ConsoleWrite("Model: " & $objItem.Model & @CRLF)
          ConsoleWrite("Status " & $objItem.Status & @CRLF)
          ConsoleWrite("SystemType: " & $objItem.SystemType & @CRLF)
next

Func _ErrFunc($oError)
    ; Do anything here.
    ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
            @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
            @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
            @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
            @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
            @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
            @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
            @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
            @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
            @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc

Build your first Console App for an ARM Architecture:

If you are interested in taking it a few steps further, you can here how to build a Console App EXE for IoT.

Happy Scripting !