Powershell‎ > ‎Training Notes‎ > ‎

PowerShell v2 Day 4

Blah

Day 4


$Voice = New-Object -ComObject SAPI.SPVoice
$Voice.Speak("blah")

$voice.Rate = -10
$Voice.Speak("hello from powershell")
$voice.Rate = 10
$Voice.Speak("hello from powershell")

 

Get-Module -ListAvailable
import-module ActiveDirectory -verbose

cd AD:
cd DC=blah,DC=local

New-PSDrive -Name BLAH -PSProvider ActiveDirectory -Root "DC=Blah,DC=Local" -Credential (get-credential)

Get-ADUser -Filter { samaccountname -like "*admin*"}
Get-ADUser -Filter { memberof -recursiveMatch $(grp.DistinguishedName)

Get-ADObject -Filter { ServicePrincipalName -like "*"} -Properties ServicePrincipalName | select Name, ServicePrincipalName


Get-ADUser Kevin | set-ADUser -Replace @{ physicalDeliveryOfficeName = "Boise" }
$user = get-ADUser Kevin - Properties *
$user.office  = "Blah"
Set-AdUser -Instance $User

 

  Active Directory Explorer sysinternals

 

ACLs


gci $HOME -Recurse | ? { ($_ | get-acl).owner -eq "$env:UserDomain\$env:Username"}

$acl = gci C:\config.sys | Get-Acl
$acl | fl *
$acl.AddAccessRule # returns an error of what you need
$ace=New-Object system.security.accesscontrol.FileSystemAccessRule "Domain\User","FullControl","Allow"
$acl.AddAccessRule($ace)
Set-Acl -Path C:\config.sys -AclObject $acl

 



WMI Type Accelerators page 525
[wmiclass] "Win32_Process"
([wmiclass] "Win32_Process").Create("notepad.exe")
([wmiclass] "\\server01\root\cimv2:Win32_Process").Create("notepad.exe")
.Net way of doing this
[system.Diagnostics.Process]::Start("notepad.exe")
 


XML


Get-Content blah.xml
$xml=[xml] (get-content blah.xml)
$xml | gm
$xml.
get-command *xml* -CommandType cmdlet

select-xml -Xml $xml -XPath "//site"
select-xml -Xml $xml -XPath "//site" |% { $_.Node}
select-xml -Xml $xml -XPath "//site" | Select-Object -ExpandProperty Node


Type Adaptation 

Module 3 page 235

Get-Process explorer | Get-Member -View Extended
Get-Process explorer | Get-Member -View Base
Get-Process explorer | Get-Member -View Adapted
Get-Process explorer | Get-Member -View Adapted,Extended
get-help Get-Member -Parameter view

(Get-Process explorer).psobject
$Process = Get-Process explorer
$Process.psbase
$Process.psobject
$Process.psextended

$Process | Add-Member -MemberType ScriptProperty -Name CurrentTime -Value { Get-Date }
$Process.CurrentTime
$Process.CurrentTime
$Process | Add-Member -MemberType ScriptMethod -Name GetCurrentTime -Value { Get-Date }
$Process.GetCurrentTime()


 
types.ps1xml
c:\Windows\System32\WindowsPowerShell\v1.0\types.ps1xml
  <Type>
    <Name>System.Management.Automation.PSDriveInfo</Name>
    <Members>
      <ScriptProperty>
        <Name>Used</Name>
        <GetScriptBlock>
          ## Ensure that this is a FileSystem drive
          if($this.Provider.ImplementingType -eq
             [Microsoft.PowerShell.Commands.FileSystemProvider])
          {
             $driveRoot = ([System.IO.DirectoryInfo] $this.Root).Name.Replace('\','')
      $drive = Get-WmiObject Win32_LogicalDisk -Filter "DeviceId='$driveRoot'"
             $drive.Size - $drive.FreeSpace
          }
        </GetScriptBlock>
        </ScriptProperty>
      <ScriptProperty>
        <Name>Free</Name>
        <GetScriptBlock>
          ## Ensure that this is a FileSystem drive
          if($this.Provider.ImplementingType -eq
             [Microsoft.PowerShell.Commands.FileSystemProvider])
          {
             $driveRoot = ([System.IO.DirectoryInfo] $this.Root).Root.Name.Replace('\','')
      $drive = Get-WmiObject Win32_LogicalDisk -Filter "DeviceId='$driveRoot'"
             $drive.FreeSpace
          }
        </GetScriptBlock>
        </ScriptProperty>
    </Members>
  </Type>

Get-PSDrive | gm

Update-TypeData .\NewTypeDat.ps1xml
Module 3 Exercise 2

  

  

 

Heading foo

ddd

PS Code Here

$To = "Kevin Curran <kcurran@blah.com>"

  

Comments