El código que ya tienes elaborado en el lenguaje C# para cumplir con esa misma función, puedes compilarlo y usarlo directamente desde PowerShell, de manera similar a como usarías esa clase desde C#, aunque adaptando la sintaxis al entorno de PowerShell. Creo que esa solución te resultaría un procedimiento mucho más sencillo que crear el código desde cero usando exclusivamente PowerShell.
La metodología que permite escribir, compilar y ejecutar código de C# (y VB.NET) directamente desde un script de PowerShell, se realiza mediante el cmdlet
Add-Type:
-
https://learn.microsoft.com/es-es/powershell/module/microsoft.powershell.utility/add-typeEl cmdlet Add-Type le permite definir una clase de .NET en la sesión de PowerShell. Seguidamente, puede crear instancias de objetos mediante el cmdlet New-Object y usar los objetos igual que usaría cualquier objeto de .NET. Si agrega un comando Add-Type al perfil de PowerShell, la clase está disponible en todas las sesiones de PowerShell.
A continuación comparto un artículo donde se detalla un ejemplo para C#:
-
https://dandraka.com/2018/11/12/powershell-how-do-you-add-inline-c/Nota: no pases por alto usar el parámetro
ReferencedAssemblies en el cmdlet
Add-Type para incluir cualquier dependencia de la librería de clases de .NET al momento de compilar el código.
Te muestro un ejemplo propio con el uso del parámetro
ReferencedAssemblies:
$csCode = @'
using Microsoft.VisualBasic;
using System;
namespace CSNamespace {
public sealed class CSClass {
public static bool CSFunction() {
return true;
}
}
}
'@
$csType = Add-Type -TypeDefinition $csCode `
-CodeDomProvider (New-Object Microsoft.CSharp.CSharpCodeProvider) `
-PassThru `
-ReferencedAssemblies "Microsoft.VisualBasic.dll", `
"System.dll" `
| where { $_.IsPublic }
$csResult = [CSNamespace.CSClass]::CSFunction()
Aténtamente,
Elektro.