[PS/Postgres] Providerprobleem

Pagina: 1
Acties:

Onderwerpen


  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Ik probeer al dagen een verbinding tot stand te brengen met een postgreSQL DB maar slaag er maar niet in. Alvorens ik huilend door het raam van de tiende verdieping spring toch even hier langskomen. Probleem in een notendop: ik ben echt niet vertrouwd genoeg met databases :'(

PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[system.reflection.assembly]::LoadWithPartialName("System.Data")

$SqlProvider  = "PostgreSQL30 Unicode"
$SqlServer    = "netdisco.blablabla.com"
$SqlDBName    = "netdisco"
$SqlPort      = 5432
$SqlTable    = "node_nbt"
$SqlColumn  = "nbname"
$SqlSelection = "ip,domain,time_last"
$SqlQuery     = "SELECT $SqlSelection FROM $SqlTable WHERE $SqlColumn = '$HostName'"
$SqlUserName  = "blabla"
$SqlPassword  = "blabla"


$SqlConnection = New-Object System.Data.OleDB.OleDBConnection
$SqlConnection.ConnectionString = "Provider=$SqlProvider;Data Source=$SqlServer;Location=$SqlDBName;UID=$SqlUserName;Password=SqlPassword;Timeout=1000;"

$SqlConnection.Open()


Het loopt ergens fout met die Provider. Ik heb psqlodbc geïnstalleerd en de driver is zichtbaar bij ODBC in Windows en werkt; met een GUI zoals navicat kan ik aan alles aan; maar in mijn script loop ik altijd maar aan tegen volgende probleem:

code:
1
2
3
4
5
6
PS C:\ $SqlConnection.Open()
Exception calling "Open" with "0" argument(s): "The 'PostgreSQL30 Unicode' provider is not registered on the local machine."
At line:1 char:20
+ $SqlConnection.Open <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException


Ik heb alle mogelijke namen van die driver al gegeven: PostgreSQL30, PostgreSQL, PostgreSQL.1, PostgreSQL ANSI, PostgreSQL Unicode,... en de error blijft dezelfde.

Google helpt niet echt: de meeste mensen met dit probleem hebben gewoon geen driver geïnstalleerd (wat hier wél het geval is). De combinatie met PowerShell geeft zelfs géén hits. Voor MS SQL vind ik alles wat ik wil, maar in het combineren van PostgreSQL met PowerShell ben ik blijkbaar een pionier :+ Nu: ik vermoed dat de oplossing voor de hand ligt, maar dan wel voor iemand die dagelijks met DBs werkt. Wat bij mij niet het geval is: dit is uitzonderlijk dat mijn scripts beroep moeten doen op een externe DB (in casu: om via netdisco op basis van hostname "IP", "domain" en "last seen" terug te krijgen.

PS. Dit staat in PRG ipv. in WOS omdat de dotnetters vooral hier rondlopen.

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 02-07 12:14
Je schrijft dat je een ODBC driver hebt geïnstalleerd, maar in je script probeer je verbinding te maken via OleDB. Ik denk dat daar iets niet klopt.

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
_js_ schreef op donderdag 30 september 2010 @ 16:57:
Je schrijft dat je een ODBC driver hebt geïnstalleerd, maar in je script probeer je verbinding te maken via OleDB. Ik denk dat daar iets niet klopt.
Oeps, da's nog een restant van al mijn pogingen om me te verbinden.

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Bump met de oplossing. Ter referentie voor wie ooit een gelijkaardig probleem heeft, want ooit moeten alle win sysadmins hier toch PS leren :p

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$HostName = "blablabla" #een of andere hostname
[system.reflection.assembly]::LoadWithPartialName("System.Data")
$SqlProvider = "{PostgreSQL Unicode}"
$SqlServer = "netdisco.blablabla.com"
$SqlDBName = "netdisco"
$SqlPort = 5432
$SqlTable = "node_nbt"
$SqlColumn = "nbname"
$SqlSelection = "ip,domain,time_last"
$SqlQuery = "SELECT $SqlSelection FROM $SqlTable WHERE $SqlColumn = '$HostName'"
$SqlUserName = "blabla"
$SqlPassword = "blabla"
$SqlConnectionString ="Driver=$SqlProvider;Server=$SqlServer;Port=$SqlPort;Database=$SqlDBName;UID=$SqlUserName;PWD=$SqlPassword;"
$SqlConnection = New-Object System.Data.Odbc.OdbcConnection
$SqlConnection.ConnectionString = $SqlConnectionString
$SqlCommand = $SqlConnection.CreateCommand()
$SqlCommand.Connection.Open()
$SqlCommand.CommandText = $SqlQuery
$SqlAdapter = New-Object System.Data.Odbc.OdbcDataAdapter $SqlCommand
$SqlDataset = New-Object System.Data.DataSet
$SqlAdapter.Fill($SqlDataSet)
$SqlCommand.Connection.Close()
$SqlDataSet.Tables[0] | ForEach-Object  {$hostIP = $_.ip; $hostDomain = $_.domain; $hostLastSeen = $_.time_last; }
Return $hostIP
Return $hostDomain
Return $hostLastSeen


Ooit heb ik tijd om een PS lexer te maken ... ooit...