Using PowerShell to Access DB2
Yes, PowerShell can be used to access DB2 using The Microsoft Host Integration Server Data Providers.
Not a tutorial, but here is the script, ran using HIS 2004’s data provider:
$cn = new-object system.data.OleDb.OleDbConnection("Provider=DB2OLEDB;User ID=<userid>;Password=<password>;Initial Catalog=<catalog>;Network Transport Library=TCP;Host CCSID=37;PC Code Page=1252;Network Address=DB2V82;Network Port=50000;Package Collection=<collection>;Default Schema=<schema>;Process Binary as Character=False;Units of Work=RUW;DBMS Platform=DB2/NT;Defer Prepare=False;Persist Security Info=True;Connection Pooling=False;");
$ds = new-object "System.Data.DataSet" "dsTest"
$q = "SELECT ID_NUMBER"
$q = $q + " ,FIRST_NAME"
$q = $q + " ,LAST_NAME"
$q = $q + " ,CITY"
$q = $q + " ,STATE"
$q = $q + " FROM <schema>.ADELINS"
$da = new-object "System.Data.OleDb.OleDbDataAdapter" ($q, $cn)
$da.Fill($ds)
$dtPerson = new-object "System.Data.DataTable" "dtPersonData"
$dtPerson = $ds.Tables[0]
$dtPerson | FOREACH-OBJECT { " " + $_.ID_NUMBER + ": " + $_.FIRST_NAME + ", " + $_.LAST_NAME + ", " + $_.CITY + ", " + $_.STATE }
Output (the values are dummy ones in the table and don’t match the column names, but everything is correct):
PS C:\scripts> c:\scripts\db2query.ps1
15
1 : 1, 2, 3, 4
1 : 2, 3, 4, 5
1 : 3, 4, 5, 6
1 : 4, 5, 6, 7
1 : 5, 6, 7, 8
x : 6, 7, 8, 9
x : 7, 8, 9, 10
x : 8, 9, 10, 11
x : 9, 10, 11, 12
x : 10, 11, 12, 13
1 : 6, 7, 8, 9
1 : 7, 8, 9, 10
1 : 8, 9, 10, 11
1 : 9, 10, 11, 12
1 : 10, 11, 12, 13
A more useful script is this one, that pings an AS400 (in this case), then tries to open a socket to the DDM port (446) to see if it’s listening:
$ip ="172.29.136.200"
$ping = new-object System.Net.NetworkInformation.Ping
$rslt = $ping.send($ip)
if ($rslt.status.tostring() -eq "Success")
{
write-host "ping worked"
# if the ping works, try opening a socket to the DDM port
$port = 446
$socket = new-object System.Net.Sockets.TcpClient($ip, $port)
if ($socket -eq $null)
{
write-host "could not open DDM socket"
}
else
{
write-host "got socket to DDM"
$socket = $null
}
}
else
{
write-host "ping failed"
}
$ping = $null
Output:
C:\scripts>powershell c:\scripts\portping.ps1
ping worked
got socket to DDM
Comments
- Anonymous
October 30, 2008
PingBack from http://mstechnews.info/2008/10/using-powershell-to-access-db2/