Powershell Basics

Hallo zusammen,

Damit ich mir nicht immer die verschiedensten Powershell Grundbefehle zusammensuchen muss, habe ich mir diese jetzt mal in einem Blogpost zusammengefasst.

/*Integrierte Hilfe*/
Get-Help
Get-Help Get-Date
Get-Help *

/*Liste aller verfügbaren cmdlets*/
Get-command

/*Powershell Version*/
get-host | select version

/*Execution Policy*/
Get-Help about_signing
Get-ExecutionPolicy
Set-ExecutionPolicy Unrestricted | RemoteSigned | AllSigned | Restricted | Default | Bypass | Undefined
Set-ExecutionPolicy RemoteSigned

 

Policy Wert Beschreibung
Restricted (Default) Keine Skripte werden ausgeführt
Allsigned Nur signierte Skripte werden ausgeführt
RemoteSigned Lokal erstellte Skripte sind erlaubt, aber andere Skripte müssen signiert sein
Unrestricted Jedes Skript wird ausgeführt

/*Powershell Datatypes*/

 

Datatype Beschreibung
[string] Fixed-length string of Unicode characters
[char] A Unicode 16-bit character
[byte] An 8-bit unsigned character
[int] 32-bit signed integer
[long] 64-bit signed integer
[bool] Boolean True/False value
[decimal] A 128-bit decimal value
[single] Single-precision 32-bit floating point number
[double] Double-precision 64-bit floating point number
[DateTime] Date and Time
[xml]  Xml object
[array] An array of values
[hashtable] Hashtable object


/*Compare Operator*/

 

Operator Beschreibung
-lt Less than
-le Less than or equal to
-gt Greater than
-ge Greater than or equal to
-eq Equal to
-ne Not Equal to
-contains Determine elements in a group. Contains always returns Boolean $True or $False
-notcontains Determine excluded elements in a group This always returns Boolean $True or $False
-like Like - uses wildcards for pattern matching
-notlike Not Like - uses wildcards for pattern matching
-match Match - uses regular expressions for pattern matching
-notmatch Not Match - uses regular expressions for pattern matching
-band Bitwise AND
-bor Bitwise OR
-is Is of Type
-isnot Is not of Type


/*Operator*/

 

Operator Beschreibung
# The hash key is for comments
+ Add
- Subtract
* Multiply
/ Divide
% Modulus (Some call it Modulo) - Means remainder 17 % 5 = 2 Remainder
= equal
-not logical not equal
! logical not equa
-replace Replace (e.g.  "abcde" -replace "b","B") (case insensitive)
-ireplace Case-insensitive replace (e.g.  "abcde" -ireplace "B","3")
-creplace Case-sensitive replace (e.g.  "abcde" -creplace "B","3")
-and AND (e.g. ($a -ge 5 -AND $a -le 15) )
-or OR  (e.g. ($a -eq "A" -OR $a -eq "B") )
-as convert to type (e.g. 1 -as [string] treats 1 as a string )
..Range operator (e.g.  foreach ($i in 1..10) {$i }  )
& call operator (e.g. $a = "Get-ChildItem" &$a executes Get-ChildItem)
. (space) call operator (e.g. $a = "Get-ChildItem" . $a executes Get-ChildItem in the current scope)
. for an objects properties $CompSys.TotalPhysicalMemory
-F Format operator (e.g. foreach ($p in Get-Process) { "{0,-15} has {1,6} handles" -F  $p.processname,$p.Handlecount } )


/*Pipe*/
Get-Service | fl name, status
Get-Service | ft name, status

/*Pipe Output to clipboard*/
Get-Service | clip

/*Sortieren*/
Get-Service | Sort-Object -Property status

/*Where*/
Get-Service | where {$_.status -eq "Running"}

/*Objekte Zählen*/
Get-Service | where {$_.status -eq "Running"} | Measure-Object

/*Ausgabe*/
Write-Host "Test"
Write-Host "Test" -ForegroundColor "Green"

/*Ausgabe in HTML*/
get-service | ConvertTo-Html -Property Name,Status > D:\Temp\Service.html

/*Benutzereingabe*/
$a = Read-Host "Enter your name"
Write-Host "Hello" $a

/*Import-CSV*/
$Header = "Vorname", "Nachname"
$csv = Import-Csv c:\mitarbeiter.csv -Header $header

/*Export-CSV*/
Get-QADUser | select-object sn, givenName, title | export-csv C:\ad-name-title.csv -encoding "unicode"

/*Filesystem*/
cd c:\temp
Get-ChildItem
Get-ChildItem -Exclude .mp3
New-Item C:\Test\Powershell -type directory

/*Read from File*/
[string]$Attachment = Get-Content C:\Attachment_small.txt

$sw = new-object system.IO.StreamWriter($LogPath, 1)
$sw.readline("Just a new Line")
$sw.close()

/*Out-File*/
$a = "Hello world"
$a | out-file test.txt

/*WriteToFile*/
$sw = new-object system.IO.StreamWriter($LogPath, 1)
$sw.writeline("Just a new Line")
$sw.close()

/*Replace*/
$test = "This is just a test"
$test= $test.Replace("test", "text")
$test
 
/*Split*/
$domuser = "RTS\widmanaf"
$arr = $domuser.split("\")
$domain = $arr[0]
$sam = $arr[1]
 
/*Registry*/
Get-ItemProperty -path "REGISTRY::\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing\" -name State
set-ItemProperty -path "REGISTRY::\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing\" -name State -value 146944

/*WMI*/
Get-WMIObject -Class Win32_Computersystem

/*Datum*/
[datetime]$datum = "11/01/2012"
$Datum = get-date
$Datum = (Get-Date).addDays(5)
$Datum =  $(get-date -format "dd.MM.yyyy HH:mm:ss")


/*If Else*/
       If ($Count -gt 0) {
            Write-Host("Computer " + $Computername + " found") -foregroundcolor Green
        } else {
            Write-Host("Computer " + $Computername + " NOT found") -foregroundcolor Red
        }

/*Bedingung*/
$a = "red"
switch ($a)
 {
  "red" {"The colour is red"}
  "white"{"The colour is white"}
  default{"Another colour"}
 }

/*Match*/
$string = "Just a little string"
$searchstring = "little"
$result = $string -match $searchstring #Result is TRUE

/*For Each*/       
Foreach (Item in Items){
 Write-Host("Do whatever you want")
}

$range = 1..2000
ForEach ($iterator in $range) {
 $groupname = "Group" + "{0:D4}" -f $iterator
 new-QADGroup -Name $groupname -SamAccountName $groupname -ParentContainer 'OU=Groups,OU=TEST,DC=destination,DC=internal' -Member j.doe
}

/*Do While*/
$a=1
Do {$a; $a++}
While ($a –lt 10)

/*Do Until*/
$a=1
Do {$a; $a++}
Until ($a –gt 10)

/*Array*/
[array]$myarray = @()
$myarray += "A"
$myarray += "B"
$myarray.GetType()
$myarray

/*Powershell Snapin*/
#Check if Forefront Snapin is already loaded
$Snapins = get-pssnapin
if ($Snapins -match "FSSPSSnapin")
    {
        Write-Output $("Forefront PS Snapin already loaded")
    }
    else
    {
        Write-Output $("Loading Forefront PS Snapin")
        Add-PsSnapin FSSPSSnapin
    }

/*Eventlog*/
Get-EventLog System -Newest 10

/*Garbage Collector*/
[System.GC]::Collect()

 

/*COM Objekte*/
$a = New-Object –comobject "wscript.network"
$a.username

/*Credential*/
$Cred = Get-Credential

/*Securestring*/
$Password = ConvertTo-SecureString Pass@word1 -AsPlainText -Force

/*Ausführen eines Scripts*/
powershell.exe "c:\myscript.ps1"

/*Parameter*/
myscript.ps1 server1 username
$servername = $args[0]
$username = $args[1]

/*Funktion*/
function sum ([int]$a,[int]$b)
{
 $result = $a + $b
 return $result
}
sum 4 5

 
/*Funktion WriteLog*/
###############################################################################
# Function WriteLog
###############################################################################
Function WriteLog {
 PARAM (
 [string]$pLogtext
 )
    $pDate =  $(get-date -format "dd.MM.yyyy HH:mm:ss")
      
    $sw = new-object system.IO.StreamWriter($LogPath, 1)
    $sw.writeline($pDate + " " + $pLogtext)
    $sw.close()
}

/*SQL Querys*/
###############################################################################
# SQL Query's with Powershell
###############################################################################
#Setup SQL Connection
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
#$SqlConnection.ConnectionString = "Data Source=ICESRV02;database=db_test;Uid=myusername;Pwd=mypassword"
#Use this Windows Authentication
$SqlConnection.ConnectionString = "Data Source=ICESRV02;database=db_test;Integrated Security=SSPI;"  
$SqlConnection.Open()
 
#SQL SELECT
$qSQL = "SELECT fID, fVorname, fNachname FROM tUsers"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $qSQL
$SqlCmd.Connection = $SqlConnection
$SQLReader = $SqlCmd.ExecuteReader()
$sqlReader.Read()
$Count = $sqlReader["SearchForPST"]
$SQLReader.close()

#SQL INSERT
$qSQL = "INSERT INTO tUsers (fVorname, fNachname) VALUES ('Hans', 'Muster')"
$SqlCmd.CommandText = $qSQL
$Result = $SqlCmd.ExecuteNonQuery()
Write-Host "Result INSERT: " $Result

#SQL UPDATE
$qSQL = "UPDATE tUsers SET fVorname = 'Fritz', fNachname = 'Meier' WHERE fNachname = 'Muster'"
$SqlCmd.CommandText = $qSQL
$Result = $SqlCmd.ExecuteNonQuery()
Write-Host "Result UPDATE: " $Result

$SqlConnection.Close()

Grüsse
Andres Bohren

/*Load DLL*/
[string]$EwsApiDll = "C:\Program Files\Microsoft\Exchange\Web Services\1.2\Microsoft.Exchange.WebServices.dll"
Import-Module -Name $EwsApiDll