|
|
| (116 intermediate revisions by the same user not shown) |
| Line 1: |
Line 1: |
| * [http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx Windows PowerShell V1]
| | #REDIRECT [[:Category:PowerShell]] |
| * [http://support.microsoft.com/kb/968929 Windows PowerShell V2]
| |
| | |
| == Variables ==
| |
| Powershell is all about manipulating objects, and its variables are all essentially the same, not being specifically defined as an object, string, integer, etc. Which is normally useful, however sometimes you need to force a variable to contain a data type. Using a prefix of [type] achieves this...
| |
| * <code> [string]$result = $PingResult.Status </code>
| |
| | |
| {|cellpadding="1" cellspacing="0" border="1"
| |
| |- style="background-color:#bbddff;"
| |
| ! Notation !! Data Type
| |
| |-
| |
| |<code> [datetime] </code> || Date or time
| |
| |-
| |
| |<code> [string] </code> || String of characters
| |
| |-
| |
| |<code> [char] </code> || Single character
| |
| |-
| |
| |<code> [double] </code> || Double-precision floating number
| |
| |-
| |
| |<code> [single] </code> || Single-precision floating number
| |
| |-
| |
| |<code> [int] </code> || 32-bit integer
| |
| |-
| |
| |<code> [wmi] </code> || Windows Management Instrumentation (WMI) instance or collection
| |
| |-
| |
| |<code> [adsi] </code> || Active Directory Services object
| |
| |-
| |
| |<code> [wmiclass] </code> || WMI class
| |
| |-
| |
| |<code> [Boolean] </code> || True or False value
| |
| |}
| |
| | |
| | |
| == 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
| |
| | |
| <pre>
| |
| 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
| |
| </pre>
| |
| | |
| | |
| == WMI ==
| |
| | |
| Cmdlet for using WMI via PowerShell is '''Get-WMIObject''', which has an alias of '''gwmi''', for example...
| |
| | |
| <pre>
| |
| 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
| |
| </pre>
| |
| | |
| | |
| === Find Classes and Properties ===
| |
| | |
| In order to find the correct class use...
| |
| <pre>
| |
| Get-WMIObject -list -credential $cred -computer 159.104.224.167 | Select-String -InputObject {$_.Name} Win32*
| |
| </pre>
| |
| | |
| 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)...
| |
| <pre>
| |
| Get-WMIObject Win32_BIOS | Format-List *
| |
| </pre>
| |
| | |
| [http://technet.microsoft.com/en-gb/magazine/2009.02.windowspowershell.aspx TechNet article: Windows PowerShell Best Inventory Tool Ever!]
| |
| | |
| == Network ==
| |
| === Ping ===
| |
| <pre>
| |
| PS H:\> $objPing = New-Object system.Net.NetworkInformation.Ping
| |
| PS H:\> $objPing.Send('127.0.0.1')
| |
| | |
| Status : Success
| |
| Address : 127.0.0.1
| |
| RoundtripTime : 0
| |
| Options : System.Net.NetworkInformation.PingOptions
| |
| Buffer : {97, 98, 99, 100...}
| |
| </pre>
| |
| | |
| === Name/Address Resolution ===
| |
| '''IP to Name'''
| |
| * Be aware, where no name can be found, the call throws an exception. If assigning result to a variable, then it seems to return the local hostname, which is odd.
| |
| <pre>
| |
| PS H:\> [System.Net.Dns]::GetHostbyAddress("159.104.31.83")
| |
| | |
| HostName Aliases AddressList
| |
| -------- ------- -----------
| |
| L-STRUTTS1 {} {159.104.31.83}
| |
| </pre>
| |
| | |
| '''Name to IP'''
| |
| <pre>
| |
| PS H:\> [System.Net.Dns]::GetHostAddresses("l-strutts1")
| |
| | |
| Address : 1394567327
| |
| AddressFamily : InterNetwork
| |
| ScopeId :
| |
| IsIPv6Multicast : False
| |
| IsIPv6LinkLocal : False
| |
| IsIPv6SiteLocal : False
| |
| IPAddressToString : 159.104.31.83
| |
| </pre>
| |
| | |
| == 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>
| |
| | |
| | |
| == Exceptions and Error Handling ==
| |
| | |
| * http://huddledmasses.org/trap-exception-in-powershell/
| |
| | |
| If you know where the error is likely to occur, then just place an error catcher immediately after it...
| |
| <pre>
| |
| if (-not $?) {
| |
| # Handle error here
| |
| }
| |
| | |
| | |
| [[Category:PowerShell]]
| |
| [[Category:WMI]]
| |
| [[Category:MySQL]]
| |