At StackOverflow I found some code that put me in the right path. So here's a practical example when mixing codes inside a PowerShell script file:
. ".\Invoke-Parallel.ps1" # Importing another script into this PowerShell script file
$csharpSource = @"
using System;
using System.Collections.Generic;
using System.Linq;
public class DateExtensions
{
public static List<Tuple<DateTime, DateTime>> GetWeeksBetweenDates(DateTime startDate, DateTime endDate)
{
var weeks = new List<Tuple<DateTime, DateTime>>();
for (DateTime date = startDate; date <= endDate; date = date.AddDays(8))
{
var weekEnd = date.AddDays(7);
weeks.Add(new Tuple<DateTime, DateTime>(date, weekEnd <= endDate ? weekEnd : endDate));
}
return weeks;
}
}
"@
Add-Type -TypeDefinition $csharpSource # Includes the C# code defined above to be called through the PowerShell script
$appPath = "C:\SomeFolder"
$startDate = [datetime]'6/1/2017'
$endDate = [datetime]'5/5/2018'
$weeks = [DateExtensions]::GetWeeksBetweenDates($startDate, $endDate)
#Calls MyApp in batches, that is, for each week...
$weeks | Invoke-Parallel -ImportVariables -ScriptBlock {
Set-Location -Path $appPath
$date = [string]::Format("{0:yyyyMMdd},{1:yyyyMMdd}", $_.Item1, $_.Item2)
#Write-Host $date
dotnet MyApp.dll budat=$date cpudt=$date # Calls .NET Core "executable" DLL for each week
}
pause #Keeps PowerShell window open to see the results
As we see in the code above, the variable $csharpSource holds the C# source code that later will called in the PowerShell script.
We then add\mix the C# code to\with PowerShell with the command Add-Type passing to it the $csharpSource variable that holds the source code. Simple as that.
Inside PowerShell script code we call the method defined in C# code with:
$weeks = [DateExtensions]::GetWeeksBetweenDates($startDate, $endDate)
This is pretty useful because we don't need to convert our C# code to PowerShell idiom.
Hope it helps.
Reference:
How to convert C# code to a PowerShell Script?