Download from PowerShell Gallery

May 3, 2017

 

Option 1 :

Use a system that has a PS 5.0 or higher and save it there.

Copy it over and install it on a PS 3.0 or 4.0 version.

Inspect

PS> Save-Module -Name SqlServer -Path <path>

Install

PS> Install-Module -Name SqlServer

clip_image002

Option 2 :

Install the GUI : PackageManagement PowerShell Modules Preview – March 2016

https://www.microsoft.com/en-us/download/details.aspx?id=51451

clip_image004


AutoIt meets .NET Common Language Runtime (CLR) Framework

April 27, 2017

CLR : The Common Language Runtime (CLR) is a an Execution Environment .

Common Language Runtime (CLR)’s main tasks are to convert the .NET Managed Code to native code, manage running code like a Virtual Machine, and also controls the interaction with the Operating System.

As part of Microsoft’s .NET Framework, the Common Language Runtime (CLR) is managing the execution of programs written in any of several supported languages.

Allowing them to share common object-oriented classes written in any of the languages.

 

Appdomain : To access the CLR environment you need to create an Appdomain Object.

An AppDomain provides an isolated region in which code runs inside of an existing process.

Application domains provide an isolation boundary for security, reliability, and versioning, and for unloading assemblies.

Application domains are typically created by runtime hosts, which are responsible for bootstrapping the common language runtime before an application is run.

 

CLR Runtime Hosts : When would you use CLR Runtime Hosts.

1. To access .NET Class Libraries :

  • System
  • System.Collections
  • System.Data
  • System.Drawing
  • System.IO
  • System.Text
  • System.Threading
  • System.Timers
  • System.Web
  • System.Web.Services
  • System.Windows.Forms
  • System.Xml

2. Accessing custom build .Net Assemblies :

Some Examples (but there are a ton out there)

  • AutoItX3 – The .NET Assembly for using AutoItX
  • JSonToXML libr.
  • XMLRPC Libr.
  • .NETPDF libr.
  • .NETOCR Libr
  • WInSCP Libr.

    3. To Compile .Net Code into an Assembly at Runtime

    4. To Run C# or VB.net Code at Runtime

    5. To Mix AU3 and .Net functionality in your Application

 

Documentation : Where to find info about CLR hosting

First of all you can find a lot on MSDN relating to .Net CLR Hosting and of course here :

AutoIt .NET CLR Framework

 

Examples : All examples are included in the above thread of the AutoIt forum.

1. To access .NET Class Libraries :

    Example : “System.Text.UTF8Encoding”

    image

    Example : “System.IO.FileInfo”

    image

    Example : “System.Windows.Forms”

    image

 

2. Accessing custom build .Net Assemblies :

    Example : AutoItX3 .NET Assembly using AutoItX

    image

 

3. To Compile .Net Code into an Assembly at Runtime

    Example : Compile Code C# and Code VB

    image

 

4. To Run C# or VB.net Code at Runtime

    Example : Compile Code C# at Runtime

    image

 

5. To Mix AU3 and .Net functionality in your Application

All of the above Examples have a mix of au3 functionality and .Net CLR code

 

This CLR.au3 UDF makes a bridge between .Net and Au3, which give a new dimension to our scripting experience.

Enjoy !


Accessing Powershell using AutoIT COM Object

January 23, 2017

AutoIT is COM enabled and more … so we can use the the SAPIEN ActiveXPosh COM Object to run Powershell code.

Or even to access .NET Assemblies …

You can use this COM object to run in any COM Compatible scripting host, like VBScript, Word, Excel, Etc …

 

First you need to download the FREE PS Com object here :

Look at the bottom of the site after login for SUPPORT next SUPPORT DOWNLOADS, Next see folder FREE COMPONENTS
http://www.sapien.com/downloads#

 

Here are some examples translated to AU3

;**************************************************************************
; Copyright (c) SAPIEN Technologies, Inc. All rights reserved
; This file is part of the PrimalScript 2007 Code Samples.
;
; File: ActiveXposh.vbs
;
; Comments:
;
; Disclaimer: This source code is intended only as a supplement to
;   SAPIEN Development Tools and/or on-line documentation.
;   See these other materials for detailed information
;   regarding SAPIEN code samples.
;
; THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
; PARTICULAR PURPOSE.
;**************************************************************************

#AutoIt3Wrapper_UseX64=N

Dim $ActiveXPosh

Const $OUTPUT_CONSOLE = 0
Const $OUTPUT_WINDOW = 1
Const $OUTPUT_BUFFER = 2

Func CreateActiveXPosh()
Dim $success

; Create the PowerShell connector object
$ActiveXPosh = ObjCreate("SAPIEN.ActiveXPoSH")
$success = $ActiveXPosh.Init(False) ;Do not load profiles
If $success <> 0 then
Consolewrite( "Init failed" & @CR)
endif
If $ActiveXPosh.IsPowerShellInstalled Then
Consolewrite( "Ready to run PowerShell commands" & @CR)
Else
Consolewrite( "PowerShell not installed" & @CR)
EndIf
; Set the output mode
$ActiveXPosh.OutputMode = $OUTPUT_CONSOLE
EndFunc


Func DownloadFile($URL,$Destination)
Local $Return
Dim $Command
Dim $FSO

;Download a file with PowerShell
$ActiveXPosh.Execute("$Client = new-object System.Net.WebClient")
;Note that variables are preserved between calls
; Construct a $Command
$Command = "$Client.DownloadFile('" & $URL & "','" & $Destination & "')"
ConsoleWrite ("Downloading ..." & @CR)
$ActiveXPosh.Execute($Command)

$FSO = ObjCreate("Scripting.FileSystemObject")
If $FSO.FileExists($Destination) Then
ConsoleWrite ("File transfer complete" & @CR)
Else
ConsoleWrite ("File Transfer failed" & @CR)
EndIf
Return $Return
EndFunc

Func ListServices()
Dim $outtext
; Set the $OUTPUT mode to $BUFFER
$ActiveXPosh.OutputMode = $OUTPUT_BUFFER
$ActiveXPosh.Execute("Get-WmiObject -class Win32_Service | Format-Table -property Name, State")

; Get the $OUTPUT line by line and add it to a variable
For $str In $ActiveXPosh.OUTPUT()
$outtext = $outtext & $str
$outtext = $outtext & @CRLF
Next

; Alternatively you can get the $OUTPUT as a single String
; $outtext = $ActiveXPosh.OutputString

ConsoleWrite ($outtext & @CR)
$ActiveXPosh.ClearOutput() ; Empty the $OUTPUT $BUFFER
EndFunc

; Create the actual Object
CreateActiveXPosh()

$Status = $ActiveXPosh.GetValue("(Get-Service UPS).Status")
if($Status = "Stopped") then
ConsoleWrite ("UPS Service is stopped" & @CR)
else
ConsoleWrite ("UPS Service is " & $Status & @CR)
EndIf


; List all running processes using PowerShell
$ActiveXPosh.Execute("Get-Process")

; Check if WinWord is running using PowerShell
if $ActiveXPosh.Eval("get-process winword") = 1 Then
ConsoleWrite ("Microsoft Word is running" & @CR)
Else
ConsoleWrite ("Microsoft Word is not running" & @CR)
EndIf

DownloadFile ("[url="http://izzy.org/scripts/PowerShell/activexposh.pdf","C:\Temp\activexposh.pdf"]http://izzy.org/scripts/PowerShell/activexposh.pdf","C:\Temp\activexposh.pdf[/url]")

; Use ListServices to show all services in this machine using PowerShell()
ListServices()

ConsoleWrite ("Version " & $ActiveXPosh.GetValue("$PSHOME") & @CR)

$ActiveXPosh = ""

 

Enjoy !


Developing a Console App for running on a Raspberry PI3 using Windows Core IoT – Without Visual Studio

December 31, 2016

I was wondering wondering If we could create an App for running on our Rasberry PI3, where Windows 10 Core IoT is installed.

As you might know regular EXE files don’t run on this windows version, because a RPI3 uses an ARM Architecture.

While a normal Windows is based on x86 or x64 Architecture.

 

Solution : 

Some years back I created a wrapper for the DotNet Compiler and called it Visual Studio Light

I modified this version that was created in AU3 to compile for ARM architecture.

(Just added the PLATFORM Switch for ARM)

 

So next I compiled this simple Console Application :

class HelloCsharp
{
       static void Main()
       {
            System.Console.WriteLine (“Hello World from C#. on ARM Architecture like Raspberry PI3 running Windows 10 Core IoT”);
       }
}


 

image

 

There where some errors popping up, but they seem to be normal.

Because I compiled the exe on a x64 Machine, and the EXE was compiled for and ARM Archtecture.

So it started complaining about this, but don’t worry  Winking smile

Next I copied the EXE for ARM to my RPI3.

image

Logged into a PS session on the RPI3, and it ran without any problems Smile

 

image

 

Enjoy!


How to check the Powershell Version and DotNet Version on Windows 10 IoT Core

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


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

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 !


Running Powershell Scripts on Windows 10 Core IoT installed on a Raspberry PI3

December 29, 2016

Microsoft released a Windows 10 IoT Core version for Raspberry PI 2 & 3.

To install this it just go here select your hardware follow the steps, and  it will go as a piece of a PI  Winking smile

 

image

Windows IoT Web Interface

Once you have the Windows Core IoT running on your RPI you can access it over the web

IP address + Port 8080

image

Access using the Windows 10 Client App

Don’t forget to switch on the REMOTE SERVER switch first.

image

Powershell access to Windows IoT on as PI3

Next you can connect to it using Powershell

Run the PS IDE as administrator and run this command.

cls

net start WinRM

Set-Item WSMan:\localhost\Client\TrustedHosts -Value rpi3

Enter-PSSession -ComputerName rpi3 -Credential administrator

Once logged in remotely using PS WSMAN connection, see the device name appearing.

image

You can check the PS Version : Check PS Version

Windows IoT Dashboard Application

You can also use the dashboard to launch a PS Session

image

File Sharing and internet connection Sharing

https://developer.microsoft.com/en-us/windows/iot/docs/windowsfilesharing

https://developer.microsoft.com/en-us/windows/iot/docs/internetconnectionsharing

You can also connect to the file system using a regular Share access.

image

 

Starting the FTP server on IOT

https://developer.microsoft.com/en-us/windows/iot/docs/ftp

Use PS and type start C:\Windows\System32\ftpd.exe

Connect using SSH Terminal

https://developer.microsoft.com/en-us/windows/iot/docs/ssh

Windows 10 IoT Core Command Line Utils

https://developer.microsoft.com/en-us/windows/iot/Docs/CommandLineUtils

Many command line Utils are at your disposal :

image

You can run regular PS Commands against the RPI3 Smile

image

There is also a screen capturer to make print screens : Screencapture.exe

image

image

Example

image

 

WMI using WMIC Util over WSMAN PS connection

https://technet.microsoft.com/en-us/library/bb742610.aspx

wmic bios

wmic cpu get name

wmic cpu get maxclockspeed

image

Here you can see that the RPI3 runs on an ARM 7 processor at 1200 Mhz

WMI Access from a desktop host using WBEM

This opens a lot of possibilities for us scripters to create apps and retrieve system data and more …

WMI WBEM Example

MS Firewall Logging Setting

You can activate the Firewall logging which makes it easy for debugging.

image

image

AU3 Powershell Module on Raspberry PI3

First copy the libraries on the RPI3

image

Here you can see all the Cmdlet’s from the AU3 Powershell module

 

image

Not that you can do a lot with it, since all the underlying AU3 Dll’s have been compiled using an X86 architecture.

And they will not run on an ARM architecture unfortunately.

Happy Scripting …

Enjoy !