Power Shell: Difference between revisions
Jump to navigation
Jump to search
(Added category) |
m (Added "MySQL") |
||
| Line 92: | Line 92: | ||
[http://technet.microsoft.com/en-gb/magazine/2009.02.windowspowershell.aspx TechNet article: Windows PowerShell Best Inventory Tool Ever!] | [http://technet.microsoft.com/en-gb/magazine/2009.02.windowspowershell.aspx TechNet article: Windows PowerShell Best Inventory Tool Ever!] | ||
== MySQL == | |||
<pre> | |||
function ConnectMySQL([string]$user,[string]$pass,[string]$MySQLHost,[string]$database) { | |||
# Load MySQL .NET Connector Objects | |||
[void][system.reflection.Assembly]::LoadWithPartialName("MySql.Data") | |||
# Open Connection | |||
$connStr = "server=" + $MySQLHost + ";port=3306;uid=" + $user + ";pwd=" + $pass + ";database="+$database+";Pooling=FALSE" | |||
$conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr) | |||
$conn.Open() | |||
$cmd = New-Object MySql.Data.MySqlClient.MySqlCommand("USE $database", $conn) | |||
return $conn | |||
} | |||
function WriteMySQLQuery($conn, [string]$query) { | |||
$command = $conn.CreateCommand() | |||
$command.CommandText = $query | |||
$RowsInserted = $command.ExecuteNonQuery() | |||
$command.Dispose() | |||
if ($RowsInserted) { | |||
return $RowInserted | |||
} else { | |||
return $false | |||
} | |||
} | |||
# setup vars | |||
$user = 'myuser' | |||
$pass = 'mypass' | |||
$database = 'mydatabase' | |||
$MySQLHost = 'database.server.com' | |||
# Connect to MySQL Database | |||
$conn = ConnectMySQL $user $pass $MySQLHost $database | |||
# Read all the records from table | |||
$query = 'INSERT INTO test (id,name,age) VALUES ("1","Joe","33")' | |||
$Rows = WriteMySQLQuery $conn $query | |||
Write-Host $Rows " inserted into database" | |||
</pre> | |||
[[Category:PowerShell]] | [[Category:PowerShell]] | ||
Revision as of 12:02, 22 December 2009
Credentials
When running commands that require a connection to a remote machine its useful to be able to store a user/pass combination so that you aren't repeatedly prompted every time you run a command. Create a credential object, then supply that in place of a username in a command
PS H:\> $cred = Get-Credential cmdlet Get-Credential at command pipeline position 1 Supply values for the following parameters: Credential PS H:\> Get-WMIObject -query "SELECT * FROM Win32_OperatingSystem" -credential $cred -computer 159.104.224.167 SystemDirectory : C:\WINDOWS\system32 Organization : TF BuildNumber : 3790 RegisteredUser : TF SerialNumber : 69712-640-3560061-45009 Version : 5.2.3790
WMI
Cmdlet for using WMI via PowerShell is Get-WMIObject, which has an alias of gwmi, for example...
PS H:\> Get-WMIObject -query "Select * from Win32_OperatingSystem"
SystemDirectory : C:\WINDOWS\system32
Organization :
BuildNumber : 2600
RegisteredUser : TF
SerialNumber : 76487-OEM-0011903-00102
Version : 5.1.2600
PS H:\> Get-WMIObject -query "SELECT * FROM Win32_UTCTime"
__GENUS : 2
__CLASS : Win32_UTCTime
__SUPERCLASS : Win32_CurrentTime
__DYNASTY : Win32_CurrentTime
__RELPATH : Win32_UTCTime=@
__PROPERTY_COUNT : 10
__DERIVATION : {Win32_CurrentTime}
__SERVER : L-0STRUTTS1
__NAMESPACE : root\cimv2
__PATH : \\L-0STRUTTS1\root\cimv2:Win32_UTCTime=@
Day : 27
DayOfWeek : 4
Hour : 10
Milliseconds :
Minute : 0
Month : 8
Quarter : 3
Second : 1
WeekInMonth : 5
Year : 2009
PS H:\> Get-WMIObject -query "Select * from Win32_OperatingSystem" -credential sysmgr -computer ukpgemon2
SystemDirectory : C:\WINDOWS\system32
Organization : Thomson Financial
BuildNumber : 3790
RegisteredUser : Dell Image Rev 1
SerialNumber : 69712-640-3560061-45321
Version : 5.2.3790
PS H:\> Get-WMIObject -query "Select * from Win32_userAccount WHERE Domain = 'OCM-WCS1' AND Name = 'pptp_ypos'" -credential administrator -computer 159.104.224.167
AccountType : 512
Caption : OCM-WCS1\pptp_ypos
Domain : OCM-WCS1
SID : S-1-5-21-2453442427-2400495818-1845097998-1073
FullName : Ypos-Consulting GmbH
Name : pptp_ypos
Find Classes and Properties
In order to find the correct class use...
Get-WMIObject -list -credential $cred -computer 159.104.224.167 | Select-String -InputObject {$_.Name} Win32*
To then see all the properties of a class use (doesn't work on remote machines (access denied) - this is a known bug in Power Shell v1)...
Get-WMIObject Win32_BIOS | Format-List *
TechNet article: Windows PowerShell Best Inventory Tool Ever!
MySQL
function ConnectMySQL([string]$user,[string]$pass,[string]$MySQLHost,[string]$database) {
# Load MySQL .NET Connector Objects
[void][system.reflection.Assembly]::LoadWithPartialName("MySql.Data")
# Open Connection
$connStr = "server=" + $MySQLHost + ";port=3306;uid=" + $user + ";pwd=" + $pass + ";database="+$database+";Pooling=FALSE"
$conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)
$conn.Open()
$cmd = New-Object MySql.Data.MySqlClient.MySqlCommand("USE $database", $conn)
return $conn
}
function WriteMySQLQuery($conn, [string]$query) {
$command = $conn.CreateCommand()
$command.CommandText = $query
$RowsInserted = $command.ExecuteNonQuery()
$command.Dispose()
if ($RowsInserted) {
return $RowInserted
} else {
return $false
}
}
# setup vars
$user = 'myuser'
$pass = 'mypass'
$database = 'mydatabase'
$MySQLHost = 'database.server.com'
# Connect to MySQL Database
$conn = ConnectMySQL $user $pass $MySQLHost $database
# Read all the records from table
$query = 'INSERT INTO test (id,name,age) VALUES ("1","Joe","33")'
$Rows = WriteMySQLQuery $conn $query
Write-Host $Rows " inserted into database"