• Bewerte uns auf OMR Reviews: Klick

  • 25Reports geht live, schaut es euch an: Klick

  • Achtet bitte in den Beiträgen darauf, dass ihr keine Informationen teilt, die der DSGVO unterliegen können. Verpixelt bitte die entsprechenden Stellen in Screenshots, postet hier auf keinen Fall Messagetracks ohne Rücksprache und auch in den Log Files können persönliche oder sensible Daten enthalten sein.

    Macht uns auch bitte per PN darauf aufmerksam wenn ihr etwas seht. Schreibt mich (@sören) einfach direkt an. 

  • Zertifikate vom Deutschen Forschungsnetz beziehen (Harica CA)? Klick

Frage zu Get-NspLicenseReport.ps1

mabu

Well-known member
Registriert
19 Dezember 2019
Beiträge
377
Reaktionspunkte
39
Hallo.

Im Rahmen der Migration unseres NSPs auf neue Server habe ich auch die bisher genutzten Reports aus Eurem Github auf den neuen Server migriert. Bis auf Get-NspLicenseReport läuft auch alles.

Ich hatte vor Jahren zu diesem Skript auch schon eine Frage. Da war mein Problem, dass die Intranet-DB auf einem externen SQL-Server lag.

Nun nutzen wir auf der Intranetrolle den lokal installierten SQL Express (ist ein neu aufgesetzter Windows Server 2022 und SQL Express 2025).

In den Beispielen unter https://github.com/noSpamProxy/Reports/tree/master/Get-NspLicenseReport_(Database) gibt es einige, die keinen einzigen SQL-Parameter enthalten. Und bei den Parametern steht in der Erklärung oft "Default" dabei. So z.B. auch bei den SQLCredentials "By default the authentication is done using current users credentials from memory."

Es ist der Benutzer am Server angemeldet, unter der die Installationen des SQL-Servers und des NSP erfolgt sind.

Zur Sicherheit habe ich auch die NspReadSqlPass.bin neu erzeugt mit dem Passwort dieses Users.

Öffne da die Powershell (egal ob "als Admin ausführen" oder nicht), wechsle in den Ordner mit dem Skript und starte
Get-NspLicenseReport.ps1 -NoMail -ReportType both

Bekomme dann diese Fehlermeldung (Verbindung zum SQL klappt wohl nicht):
PS C:\NSP_Skripte\Skript_LicenseReport> .\Get-NspLicenseReport.ps1 -NoMail -ReportType both
Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\NSP_Skripte\Skript_LicenseReport\Get-NspLicenseReport.ps1:279 Zeichen:3
+ $connection.Close();
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Ausnahme beim Aufrufen von "Open" mit 0 Argument(en): "Netzwerkbezogener oder instanzspezifischer Fehler beim
Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen
werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: SQL
Network Interfaces, error: 26 - Fehler beim Bestimmen des angegebenen Servers/der angegebenen Instanz)"
In C:\NSP_Skripte\Skript_LicenseReport\Get-NspLicenseReport.ps1:252 Zeichen:2
+ $connection.Open()
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException

Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\NSP_Skripte\Skript_LicenseReport\Get-NspLicenseReport.ps1:279 Zeichen:3
+ $connection.Close();
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Ausnahme beim Aufrufen von "Open" mit 0 Argument(en): "Netzwerkbezogener oder instanzspezifischer Fehler beim
Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen
werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: SQL
Network Interfaces, error: 26 - Fehler beim Bestimmen des angegebenen Servers/der angegebenen Instanz)"
In C:\NSP_Skripte\Skript_LicenseReport\Get-NspLicenseReport.ps1:252 Zeichen:2
+ $connection.Open()
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException

Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
In C:\NSP_Skripte\Skript_LicenseReport\Get-NspLicenseReport.ps1:279 Zeichen:3
+ $connection.Close();
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

Ausnahme beim Aufrufen von "Open" mit 0 Argument(en): "Netzwerkbezogener oder instanzspezifischer Fehler beim
Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen
werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: SQL
Network Interfaces, error: 26 - Fehler beim Bestimmen des angegebenen Servers/der angegebenen Instanz)"
In C:\NSP_Skripte\Skript_LicenseReport\Get-NspLicenseReport.ps1:252 Zeichen:2
+ $connection.Open()
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException

Remote invoke
Skript durchgelaufen


Ich habe nun einiges probiert mit den Parametern, aber es bringt immer wieder diesen Fehler. Bin jetzt doch total ratlos.

Wir haben im SQL-Express letzte Woche auch noch eine Anpassung vorgenommen, damit TCP-Anfragen von anderen Systemen auf die NSP-IntranetDB möglich sind. Wir benötigen das in einem anderen Prozess, der die Nachrichtenverfolgung nach bestimmten Mails durchsucht, um in einem "Prozesstool" die darauf folgenden Schritte weiter laufen zu lassen. (Irgendwie so - ist nicht so meine Zuständigkeit.)

Was übersehe ich hier? Was muss ich an Parametern noch mit einbauen, damit die Abfrage wieder funktioniert?

Bin gespannt auf Eure Lösungsvorschläge. Danke.
 
Mein Tipp wäre, einen SQL Benutzer (nicht Windows Benutzer) mit Passwort zu erstellen und den lesend auf die NSP Datenbank zu berechtigen (ist auch sicherheitstechnisch immer eine gute Idee, nur lesenden Zugriff zu geben).

Dann einfach mit dem Skriptaufruf den Benutzer angeben und in der .bin das Passwort des SQL-Benutzers abspeichern.
 
Das ist einen Versuch wert. Das mit der BIN ist auch klar.

Muss ich denn außer dem Parameter für den SQLUser ansonsten noch irgendwas für die Standard-NSP-SQL-DB in den Parametern mit aufnehmen?
 
Die "Integrated authentication" die standardmäßig versucht wird ist an den user gebunden welcher den SQL Kontext eröffnet.
Also wenn du es manuell ausführst dein aktueller Windows Benutzer ^^

Dein Problem ist aber schon einmal, dass die Verbindnug zur Datenbank nicht geht, nicht das du dich nicht authentifizieren kannst.
Das liegt vermutlich daran, dass du bei einer sauberen Neuinstallation ganz andere Parameter benötigst als im Skript standardmäßig gesetzt sind.
Folgendes ist im Skript als Standard definiert:
Code:
Datenbank Name: NoSpamProxyAddressSynchronization
SQL Instanz Name: NoSpamProxy
SQL Server: (local)
Bei einer neuen Windows Server und Standard NSP Installation wirst du aber mit folgendem arbeiten müssen:
Code:
Datenbank Name: NoSpamProxyIntranetRole
SQL Instanz Name: ""
SQL Server: (local)
Der leere Instanz Name führt dazu, dass die SQL Standardinstanz verwendet wird.

Die SQL Authentifizierung ist standardmäßig deaktiviert, wenn du sie nicht aktiviert hast kannst du nur per "Integrated Authentication" dich anmelden. Damit darfst du keine SqlCredentials oder SqlUsername übergeben, das stößt immer eine SQL Authentifizierung an.
Das bedeutet du musst entweder SQL Authentifizierung aktivieren oder den User der das Skript ausführt legitimieren an die Datenbank ranzukommen.

Wenn irgendwelche der Daten abweichen, dann musst du diese natürlich anpassen.


Anbei eine Frage:
Sind die Readme und Hilfen unverständlich oder unvollständig aus deiner Sicht?
Falls ja: was fehlt?
Ich frage, da das für mich klar daraus hervorgeht und mein Ziel natürlich ist, dass jeder der sich die Sachen anschaut dies auch nachvollziehen kann um zu wissen was er da auf seinem Server ausführt. Sollte das so nicht gut sein, sollte ich schauen, dass es verbessert wird :)

LG
Jan
 
Zurück
Oben