1 Pluspunkt 0 Minuspunkte

Man kann über Com-Interop mit Com Objekten in Powershell arbeiten. Z.B mit Excel.

$excel = New-Object -ComObject Excel.Application
$workbook = $excel.Workbooks.Open("workbook.xlsx")
$sheet = $workbook.Sheets.Item("Sheet1")

Wie kann ich ein eigenes Programm schreiben das ich auch so verwenden kann?

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Hier ist ein Beispiel

using System;
using System.Runtime.InteropServices;

namespace MyNamespace
{

    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [Guid("E0F805D1-77CC-4C14-930E-5D65A1A39A2F")]
    public interface IMyComInterface
    {

        void SayHello(string name);

    }

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    [Guid("1C9D8F2B-8D52-45A7-9E3D-ED6F2CE010E0")]
    public class MyComClass : IMyComInterface
    {

        public void SayHello(string name)
        {

            Console.WriteLine($"Hello, {name}!");

        }

    }

}

In Visual Studio musst du in den Projekteinstellungen in den Build Optionen die Option "Für Interop registrieren" aktivieren. Wenn du das Projekt erstellt hast registrierst du die DLL mit dem Programm regasm für Interop.

regasm /codebase /tlb MyLibrary.dll

In Powershell kannst du die Klasse dann so verwenden wie das COM Interface von Excel.

$comObject = New-Object -ComObject "MyNamespace.MyComClass"
$comObject.SayHello("World")
von (868 Punkte)  
Und von wo kommen diese E0F805D1-77CC-4C14-930E-5D65A1A39A2F und 1C9D8F2B-8D52-45A7-9E3D-ED6F2CE010E0? Kann man sich da etwas aussuchen wenn ich eine neue Funktion erstelle?
Guid für c# Funktion erstellen