Wednesday, 23 January 2013

Configure-DC1-1.ps1

  1. # Configure-DC1-1.ps1
  2. # Converts Server to DC
  3. # Version 1.0.0 - 14 Jan 2013
  4. # See http://tfl09.blogspot.com for more details
  5. # Config script block
  6. $conf = {
  7. # Install the AD - the reboot is or should be automagic
  8. Install-Windowsfeature AD-Domain-Services -IncludeManagementTools
  9. # Now install the AD to DC1
  10. $PasswordSS = ConvertTo-SecureString -string 'Pa$$w0rd' -AsPlainText -Force
  11. Install-ADDSForest -DomainName Reskit.Org -SafeModeAdministratorPassword $PasswordSS -force -InstallDNS -DomainMode Win2012 -ForestMode Win2012
  12. }
  13. # Here is start of script
  14. $Username = "DC1\administrator"
  15. $PasswordSS = ConvertTo-SecureString 'Pa$$w0rd' -AsPlainText -Force
  16. $Creddc1 = New-Object system.management.Automation.PSCredential $username,$PasswordSS
  17. # First, run a simple script block to check that the server is actually running and is the one we think it is
  18. Invoke-Command -ComputerName DC1 -ScriptBlock { ipconfig;hostname} -Credential $Creddc1 -verbose
  19. Pause
  20. # Now add create our forest/domain/dc
  21. Invoke-Command -ComputerName DC1 -Scriptblock $conf -Credential $Creddc1 -verbose
Technorati Tags: ,,,

Monday, 21 January 2013

Create-VM.PS1

  1. # Create-VM.ps1 
  2. # Script that creates VMs 
  3. # Version 1.0.0 - 20 Jan 2013 
  4. # See http://tfl09.blogspot.co.uk/2013/01/building-hyper-v-test-lab-on-windows-8.html 
  5.  
  6. # First define the Create-VM Function 
  7.  
  8. Function Create-VM { 
  9. #=================================================== 
  10. # Create a New VM 
  11. #=================================================== 
  12.  
  13. # Parameters are Name, Virtual Machine Path, path to reference Vhdx,
  14. # network switch to use, VM Memory, Unattend file, IP address and DNS
  15. # Server to set. Default values are specified in the Param block,
  16. # but these are normally overridden in the call to Create0VM 
  17.  
  18.  
  19. [Cmdletbinding()] 
  20. Param (  
  21.  $Name         = "Server"
  22.  $VmPath       = "C:\v3"
  23.  $ReferenceVHD = "C:\v3\Ref2012.vhdx"
  24.  $Network      = "Internal"
  25.  $VMMemory     = 512mb, 
  26.  $UnattendXML  = "C:\v3\unattend.xml"
  27.  $IPAddr       = '10.0.0.250/24'
  28.  $DnsSvr       = '10.0.0.10' 
  29.  
  30. $Starttime = Get-Date 
  31. Write-Verbose "Starting Create-VM at $Starttime" 
  32. Write-verbose "Creating VM: [$name]" 
  33. Write-verbose "Path to VM : [$VMpath]" 
  34.  
  35. #    Set path to differencing disk location 
  36. $path = "$vmpath\$name.vhdx" 
  37. Write-Verbose "Creating Disk at [$path]" 
  38.  
  39. #    Add a new differencing VHDX, Based on parent parent 
  40. $vmDisk01 = New-VHD –Path $path -Differencing –ParentPath $ReferenceVHD -ErrorAction Stop 
  41. Write-Verbose "Added VM Disk [$VMdisk01], pointing to [ReferenceVHD]" 
  42.  
  43. #    Create a New VM 
  44. $VM = New-VM –Name $name –MemoryStartupBytes $VMMemory –VHDPath $VMDisk01.path -SwitchName $Network -Path $vmPath 
  45. Write-Verbose "VM [$name] created" 
  46.  
  47. # Mount the Disk into the VM 
  48. Mount-DiskImage -ImagePath $path 
  49. $VHDDisk = Get-DiskImage -ImagePath $path | Get-Disk 
  50. $VHDPart = Get-Partition -DiskNumber $VHDDisk.Number 
  51. $VHDVolumeName = [string]$VHDPart.DriveLetter 
  52. $VHDVolume = [string]$VHDPart.DriveLetter + ":" 
  53. Write-verbose "Volume [$Volumename] created in VM [$name]" 
  54.  
  55.  
  56. #    Get Unattended.XML file 
  57. Write-Verbose "Using Unattended XML file [$unattendXML]" 
  58.  
  59. #    Open XML file 
  60. $Xml = [xml](get-content $UnattendXML
  61.  
  62. #    Change ComputerName 
  63. Write-Verbose "Setting VM ComputerName to: [$name]" 
  64. $Xml.unattend.settings.component | Where-Object { $_.Name -eq "Microsoft-Windows-Shell-Setup" } | 
  65.  ForEach-Object
  66.    if($_.ComputerName) { 
  67.      $_.ComputerName = $name 
  68.    } 
  69.  
  70. #    Change IP address 
  71. Write-Verbose "Setting VM ComputerName to: [$name]" 
  72. $Xml.unattend.settings.component | Where-Object { $_.Name -eq "Microsoft-Windows-TCPIP" } | 
  73.   ForEach-Object
  74.  
  75.     if($_.Interfaces) { 
  76.       $ht='#text' 
  77.       $_.interfaces.interface.unicastIPaddresses.ipaddress.$ht = $IPAddr 
  78.   } 
  79.  
  80. #    Change DNS Server address 
  81. #    Use obscure way to create the #TEXT node 
  82. Write-Verbose "Setting VM DNS address to: [$DNSSvr]" 
  83. $Xml.Unattend.Settings.Component | Where-Object { $_.Name -eq "Microsoft-Windows-DNS-Client" } | 
  84.   ForEach-Object
  85.       if($_.Interfaces) { 
  86.       $ht='#text' 
  87.       $_.Interfaces.Interface.DNSServerSearchOrder.Ipaddress.$ht = $DNSSvr 
  88.   } 
  89.  
  90. #    Save XML File on Mounted VHDX differencing disk 
  91. $xml.Save("$VHDVolume\Unattend.XML"
  92. Write-Verbose "Unattended XML file saved to vhd [$vhdvolume\unattend.xml]" 
  93.  
  94. #    Dismount VHDX  
  95. Write-Verbose "Dismounting disk image: [$Path]" 
  96. Dismount-DiskImage -ImagePath $path 
  97.  
  98. #    Update additional VM settings 
  99. Write-Verbose 'Setting additional VM settings' 
  100. Set-VM -Name $name -DynamicMemory 
  101. Set-VM -Name $name -MemoryMinimumBytes $VMMemory 
  102. Set-VM -Name $name -AutomaticStartAction Nothing 
  103. Set-Vm -Name $name -AutomaticStopAction ShutDown 
  104.  
  105. #    Show what has been created! 
  106. "VM Created:" 
  107. Get-VM -Name $name | fl * 
  108.  
  109. #    Start VM 
  110. Write-verbose "VM [$Name] being started" 
  111. Start-VM -Name $name 
  112.  
  113. #    Now work out and write how long it took to create the VM 
  114. $Finishtime = Get-Date 
  115. Write-Verbose ("Creating VB ($name) took {0} seconds" -f ($FinishTime - $Starttime).totalseconds) 
  116. # End of Create-VM function 
  117.  
  118.  
  119. ####################################################################################################### 
  120. #       CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS     # 
  121. #       CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS     # 
  122. #       CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS     # 
  123.  
  124. # Location of Server 2012 DVD Iso Image 
  125. $iso   = 'c:\Builds\9200.16384.120725-1247_x64frev_Server_Datacenter_VL_HRM_SSS_X64FREV_EN-US_DVD.iso' 
  126. # Where we put the reference VHDX 
  127. $ref   = 'c:\v3\Ref2012.vhdx' 
  128. # Path were VMs, VHDXs and unattend.txt files live 
  129. $path  = 'c:\V3' 
  130. # Location of Unattend.xml - first for workstation systems, second for domain joined systems  
  131. $una   = 'c:\V3\UnAttend.xml' 
  132. $unadj = 'c:\V3\UnAttend.dj.xml' 
  133.  
  134. #       CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS     # 
  135. #       CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS     # 
  136. #       CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS     # 
  137. ####################################################################################################### 
  138.  
  139. #   Now run the script to create the VMs as appropriate. 
  140. $Start = Get-Date 
  141. "Create-VM --- Started at: $Start" 
  142.  
  143. #################################################################### 
  144. # Comment out VMs you do NOT want to create then run the entire script 
  145. # To comment out a VM creation, just add a '#" at the start of the line.  
  146. #        Removing the comment line means you want to create that VM.  
  147. #        BE creful!  If you make a mistake, stop the script. Kill any VMs created, then remove the 
  148. #        storage for the VMs.  
  149. ####################################################################################################### 
  150.  
  151. #    Create the DC - NON-domained joined 
  152. # Create-VM -name "DC1"  -VmPath $path -ReferenceVHD $ref -Network "Internal" -UnattendXML $una -Verbose -IPAddr '10.0.0.10/24' -DNSSvr 10.0.0.10  -VMMemory 1gb 
  153.  
  154. #    Remaining VMs use the domain-join version of unattend.xml 
  155. # Create-VM -name "Srv1"  -VmPath $path -ReferenceVHD $ref -Network "Internal" -UnattendXML $unadj -Verbose -IPAddr '10.0.0.30/24' -DNSSvr 10.0.0.10  -VMMemory 512mb 
  156. # Create-VM -name "Srv2"  -VmPath $path -ReferenceVHD $ref -Network "Internal" -UnattendXML $unadj -Verbose -IPAddr '10.0.0.31/24' -DNSSvr 10.0.0.10  -VMMemory 512mb 
  157. # Create-VM -name "Sql1"  -VmPath $path -ReferenceVHD $ref -Network "Internal" -UnattendXML $unadj -Verbose -IPAddr '10.0.0.20/24' -DNSSvr 10.0.0.10  -VMMemory 768mb 
  158. # Create-VM -name "Exch1" -VmPath $path -ReferenceVHD $ref -Network "Internal" -UnattendXML $unadj -Verbose -IPAddr '10.0.0.21/24' -DNSSvr 10.0.0.10  -VMMemory 768mb 
  159.  
  160. #    DHCP 1,2 for advanced networking class 
  161. # Create-VM -name "DHCP1" -VmPath $path -ReferenceVHD $ref -Network "Internal" -UnattendXML $unadj -Verbose -IPAddr '10.0.0.51/24' -DNSSvr 10.0.0.10 -VMMemory 512mb 
  162. # Create-VM -name "DHCP2" -VmPath $path -ReferenceVHD $ref -Network "Internal" -UnattendXML $unadj -Verbose -IPAddr '10.0.0.52/24' -DNSSvr 10.0.0.10 -VMMemory 512mb 
  163.  
  164. #    Create a second DC for reskit.org for advanced class 
  165. # Create-VM -name "DC2"  -vmPath $path -ReferenceVHD $ref -network "Internal" -UnattendXML $unadj -Verbose -IPAddr '10.0.0.11/24' -DNSSvr 10.0.0.10  -VMMemory 512mb 
  166.  
  167.  
  168. #  script is all done - just say nice things and quit. 
  169. $Finish = Get-Date 
  170. "Create-VM --- Finished at: $Finish" 
  171. "Elapsed Time :  $(($Finish-$Start).totalseconds) seconds" 
  172.   
Technorati Tags: ,,,

Sunday, 20 January 2013

Open-FunctionInISE

  1. Function Open-FunctioninISE {
  2. <#
  3. .SYNOPSIS
  4. Opens a function in ISE
  5. .DESCRIPTION
  6.     This enables you to specify the function to open. The definition
  7.     comes from (Get-Command <command>).definition.
  8.     You specify the name of the function to open, or select it
  9.     in the ISE
  10. .NOTES
  11.     File Name : Open-FunctionInIse.ps1
  12.     Author : Thomas Lee - tfl@psp.co.uk
  13.     Requires : PowerShell Version 3.0
  14.     Based on a technet script published at http://gallery.technet.microsoft.com/scriptcenter/Open-defined-functions-in-22788d0f 
  15. .LINK
  16.     This script posted to:
  17.         http://www.pshscripts.blogspot.com
  18. .PARAMETER Function
  19.     The name of a defined function to open in new PowerShell ISE tab.
  20. .EXAMPLE
  21.     C:\Psh> Open-FunctionInIse Open-FunctioninISE
  22.     Opens Open-FunctionInIse in a new PowerShell ISE tab
  23. .EXAMPLE
  24.     Select a function name in an open edit window, then hit
  25.     Ctrl+Shift+E (or use the Add-ons menu)
  26. #>
  27. # Define parameters
  28. [Cmdletbinding()]
  29. Param(
  30. [Parameter(Position=0)]
  31. [ValidateScript({ Get-Command -commandtype function -name $_ })]
  32. [String] $function
  33. )
  34. # Start of the function.
  35. Process{
  36. # Get the function name (i.e. the selected text) and ensure it's not empty
  37. $fn = $psise.currentfile.Editor.selectedText
  38. # if nothing selected, see if we got called with it
  39. If (!$fn -or ($fn.length -LE 0)) {
  40. if ($function -and ($function.length -GT 0)){
  41. $fn = $function}
  42. Else {
  43. $fn = Read-Host -Prompt "Enter function name to view"
  44. }
  45. }
  46. If (!$Fn) {'No function to edit';return}
  47. # Get the definition, if there is one
  48. $definition = (Get-Command -commandtype function -name $fn).definition
  49. If (!$definition -or ($Definition.Length -le 0)) {return "Function [$fn] not found"}
  50. # Create What to see
  51. $FunctionHeader = "Function $fn {`n"
  52. $comments = "`# Description : $($definition.description)`n"
  53. $comments += "`# Module : $($definition.module)`n`n"
  54. $FunctionTrailer = "`n}"
  55. # Wrap it all up
  56. $definition = $functionHeader + $Comments + $Definition + $FunctionTrailer
  57. "function $fn {" + $definition + "}"
  58. # Add a tab, add text to the tab, set caret position to first character
  59. $tab = $Psise.CurrentPowerShellTab.Files.Add()
  60. $tab.Editor.text = $definition
  61. $tab.Editor.SetCaretPosition(1,1)
  62. # Sleep for a moment. Ran into issues without this.
  63. Start-Sleep -Milliseconds 200
  64. } # End process block
  65. } # End Function
  66. Set-ALias OFISE .\Open-FunctionInISE
  67. # Here we could test the function from the command line.
  68. # Function test123 {'testing 1-2-3'}
  69. # Open-FunctioninISE test123
  70. # I assume you'll just use this function so I've left the following
  71. # Code in place to add this as a menu item
  72. # Here add to the ISE as long as it's not there already!
  73. $x = ($psise.CurrentPowerShellTab.AddOnsMenu.Submenus).displayname
  74. if (! ($x -contains "_Edit Function in ISE")) {
  75. $Psise.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("_Edit Function in ISE", {Open-FunctioninISE},
  76. "Ctrl+Shift+E") | Out-Null
  77. }
  78. Else {
  79. 'Function already added in ISE'
  80. }

Tuesday, 15 January 2013

Create-ReferenceVHDX.ps1

  1. # Create-ReferenceVHDX.ps1
  2. # Script that will create a reference VHDX for later VM Creation
  3. # Version 1.0.0 - 14 Jan 2013
  4. # Define a function to create a reference VHDX.
  5. Function Create-ReferenceVHDX {
  6. [Cmdletbinding()]
  7. Param (
  8. # ISO of OS
  9. [string] $Iso = 'C:\downloads\9200.16384.120725-1247_x64frev_Server_Datacenter_VL_HRM_SSS_X64FREV_EN-US_DVD.iso',
  10. # Path to reference VHD
  11. [string] $RefVHDXPath = "C:\vhd\Ref2012.vhdx"
  12. )
  13. # Get start time
  14. $StartTime = Get-Date
  15. Write-Verbose "Beginning at $StartTime"
  16. #--------------------------------------------------+
  17. # Mount an ISO and check out available OS versions!
  18. #--------------------------------------------------+
  19. # Import the DISM module
  20. Write-Verbose 'Loading DISM module' -Verbose:$false
  21. Import-Module -Name DISM -Verbose:$False
  22. # Mount the OS ISO image onto the local machine
  23. Write-Verbose "Mounting ISO image [$iso]"
  24. Mount-DiskImage -ImagePath $iso
  25. # Get the Volume the Image is mounted to
  26. Write-Verbose 'Getting disk image of the ISO'
  27. $ISOImage = Get-DiskImage -ImagePath $ISO | Get-Volume
  28. Write-Verbose "Got disk image [$($ISOImage.DriveLetter)]"
  29. # And get the drive Letter of the dirve where the image is mounted
  30. # add the drive letter separator (:)
  31. $ISODrive = [string]$ISOImage.DriveLetter+":"
  32. Write-Verbose "OS ISO mounted on drive letter [$ISODrive]"
  33. # Next we will get the installation versions from the install.wim.
  34. # $Indexlist is the index of WIMs on the DVD - display the versions
  35. # available in the DVD and let user select the one to serve as the base
  36. # image - probably DataCentre Full Install
  37. $IndexList = Get-WindowsImage -ImagePath $ISODrive\sources\install.wim
  38. Write-Verbose 'Got Index list - displaying it now!'
  39. # Display the list and return the index
  40. $item = $IndexList | Out-GridView -OutputMode Single
  41. $index = $item.ImageIndex
  42. Write-Verbose "Selected image index [$index]"
  43. #---------------------------------+
  44. # Create a Reference Image !
  45. #---------------------------------+
  46. # Create the VHDX for the reference image
  47. $VMDisk01 = New-VHD –Path $RefVHDXPath -SizeBytes 15GB
  48. Write-Verbose "Created VHDX File [$($vmdisk01.path)]"
  49. # Get the disk number
  50. Mount-DiskImage -ImagePath $RefVHDXPath
  51. $VHDDisk = Get-DiskImage -ImagePath $RefVHDXPath | Get-Disk
  52. $VHDDiskNumber = [string]$VHDDisk.Number
  53. Write-Verbose "IReference image is on disk number [$VhddiskNumber]"
  54. # Create a New Partition
  55. Initialize-Disk -Number $VHDDiskNumber -PartitionStyle MBR
  56. $VHDDrive = New-Partition -DiskNumber $VHDDiskNumber -UseMaximumSize -AssignDriveLetter -IsActive | Format-Volume -Confirm:$false
  57. $VHDVolume = [string]$VHDDrive.DriveLetter+":"
  58. Write-Verbose "VHD drive [$vhddrive], Vhd volume [$vhdvolume]"
  59. # Execute DISM to apply image to base disk
  60. Write-Verbose 'Using DISM to apply image to the volume'
  61. Write-Verbose 'This will take some time'
  62. Dism.exe /apply-Image /ImageFile:$ISODrive\Sources\install.wim /index:$Index /ApplyDir:$VHDVolume\
  63. # Execute BCDBoot so volume will boot
  64. Write-Verbose 'Setting BCDBoot'
  65. BCDBoot.exe $VHDVolume\Windows /s $VHDVolume /f BIOS
  66. # Dismount the Images
  67. Write-Verbose "Dismounting ISO and new disk"
  68. Dismount-DiskImage -ImagePath $ISO
  69. Dismount-DiskImage -ImagePath $RefVHDXPath
  70. Write-Verbose "Created Reference Disk [$RefVHDXPath]"
  71. Get-ChildItem $RefVHDXPath
  72. $FinishTime = Get-Date
  73. $tt= $FinishTime - $StartTime
  74. Write-Verbose "Finishing at $FinishTime"
  75. Write-verbose "Creating base image took [$($tt.totalminutes)] minutes"
  76. } # End of Create-ReferenceVHDX
  77. ################################################################################################################
  78. # CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS #
  79. # CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS #
  80. # CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS #
  81. # Path to Server 2012 DVD
  82. $iso = 'C:\Builds\9200.16384.120725-1247_x64frev_Server_Datacenter_VL_HRM_SSS_X64FREV_EN-US_DVD.iso'
  83. # PathTo the reference VDHX is to go
  84. $refvhdxpath = 'C:\V3\ref2012.vhdx'
  85. # CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS #
  86. # CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS #
  87. # CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS ===== CHECK THESE PATHS #
  88. #################################################################################################################
  89. Create-ReferenceVHDX -iso $iso -RefVHDXPath $RefVHDXPath -Verbose

Saturday, 22 December 2012

Show-Exceptions.ps1

  1. <# 
  2. .SYNOPSIS 
  3.     This script gets all the exceptions you can trap by PowerShell 
  4. .DESCRIPTION 
  5.     This script looks at all the loaded assemblies to get all 
  6.     the exceptions you can trap/catch using PowerShell. The 
  7.     display only covers those parts of the .NET framework are loaded. 
  8. .NOTES 
  9.     File Name  : Show-Exceptions.ps1 
  10.     Author     : Thomas Lee - tfl@psp.co.uk 
  11.     Requires   : PowerShell Version 2.0 
  12. .LINK 
  13.     This script posted to: 
  14.         http://www.pshscripts.blogspot.com 
  15. .EXAMPLE 
  16.     Psh> .\Show-Exceptions.ps1 -Summary 
  17.     In 69 loaded assemblies, you have 418 exceptions: 
  18.  
  19. .EXAMPLE 
  20.     Psh> .\Show-Exceptions.ps1 
  21.     In 69 loaded assemblies, you have 418 exceptions: 
  22.  
  23.     Name                     FullName                                                 
  24.     ----                     --------                                                 
  25.     _Exception               System.Runtime.InteropServices._Exception                
  26.     AbandonedMutexException  System.Threading.AbandonedMutexException                 
  27.     AccessViolationException System.AccessViolationException                      
  28.     ... 
  29.      
  30. #> 
  31.  
  32. [CMDLETBINDING()] 
  33. Param ( 
  34. [switch] $summary 
  35. #    Get all the exceptions 
  36. $assemblies = [System.AppDomain]::CurrentDomain.GetAssemblies() 
  37. $exceptions = $Assemblies | ForEach { 
  38.      $_.GetTypes() | where { $_.FullName -Match "System$filter.*Exception$" } } 
  39.  
  40. # Now display the numbers checking for summary flag 
  41. "In {0} loaded assemblies, you have {1} exceptions:" -f $assemblies.count, $exceptions.count 
  42. If (-not $summary) { 
  43. $Exceptions | sort name | format-table name, fullname 
Technorati Tags:

Sunday, 9 December 2012

Get-LyncAutoLogonStatus.ps1

  1. <# 
  2. .SYNOPSIS 
  3.     This script reports on whether Lync should 
  4.     automatically start on a machine when a user 
  5.     logs in
  6. .DESCRIPTION 
  7.     This script looks in the registry at a chosen machine 
  8.     to determine if the Lync client should automatically 
  9.     attempt to login when a user logs onto that system. 
  10. .NOTES 
  11.     File Name  : Get-LyncAutoLogonStatus 
  12.     Author     : Thomas Lee - tfl@psp.co.uk 
  13.     Requires   : PowerShell Version 2.0 
  14.                  Lync 2010 or later 
  15. .LINK 
  16.     This script posted to: 
  17.         http://www.pshscripts.blogspot.com 
  18. .EXAMPLE 
  19.     Psh> .\Get-LyncAutoLogonStatus     
  20.     Automatically start Lync when I log on to Windows: True 
  21. #> 
  22.  
  23.  
  24. [Cmdletbinding()] 
  25. Param ( 
  26. [string] $computer = "Cookham8.Cookham.net"
  27.  
  28.  
  29. # Get the relevant registry key 
  30. $registry = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("CurrentUser", $computer
  31. $key = $registry.OpenSubKey("SOFTWARE\Microsoft\Communicator", $True
  32.   
  33. # now write to host the details 
  34. Write-Host "Automatically start Lync when I log on to Windows:",` 
  35.     ([boolean] $key.GetValue("AutoRunWhenLogonToWindows",$null)) 
Technorati Tags: ,

Sunday, 2 December 2012

Set-AdminLogon.ps1

  1. <# 
  2. .SYNOPSIS 
  3.     This script defines a function that sets autologon 
  4. .DESCRIPTION 
  5.     Autologon enables the system to logon after a reboot without 
  6.     you needing to enter credentials. This is an ideal scenario 
  7.     for lab or training room systems. This script defines 
  8.     a function that sets a userid/password and autologon.
  9. .NOTES 
  10.     File Name  : Set-AdminLogon 
  11.     Author     : Thomas Lee - tfl@psp.co.uk 
  12.     Requires   : PowerShell Version 2.0 
  13. .LINK 
  14.     This script posted to: 
  15.         http://www.pshscripts.blogspot.com 
  16. .EXAMPLE 
  17.     Psh> New-AdminLogon -user cookham\tfl -password 'JerryGarciaR0cks!' 
  18.     Auto logon created for [Cookham\tfl] with password: [JerryGarciaR0cks]          
  19.  
  20. #> 
  21.  
  22. Function New-AdminLogon { 
  23.  
  24. [cmdletbinding()] 
  25. Param( 
  26. [string] $User     = $(Throw 'No user id specified'), 
  27. [string] $Password = $(Throw 'No password specified'
  28.  
  29. # Define registry path for autologon 
  30. $RegPath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' 
  31.  
  32. # Set autologon 
  33. Set-ItemProperty -Path $RegPath -Name AutoAdminLogon -Value 1  
  34.  
  35. # Set userid and password 
  36. Set-ItemProperty -Path $RegPath -Name DefaultUserName -Value $User  
  37. Set-ItemProperty -Path $regPath -Name DefaultPassword -Value $Password  
  38.  
  39. # Say nice things and exit! 
  40. Write-Host ("Auto logon [{0}] set to password: [{1}]" -f $user, $password
  41.  
  42. Set-AdminLogon -User 'Cookham\tfl' -Password 'JerryGarciaR0cks' 
Technorati Tags: ,

Remove-AdminLogon.ps1

  1. <#
  2. .SYNOPSIS
  3. This script defines a function that removes autologon
  4. .DESCRIPTION
  5. Autologon enables the system to logon after a reboot without
  6. you needing to enter credentials. This is an ideal scenario
  7. for lab or training room systems. This script defines
  8. a function that removes the autologon registry keys
  9. .NOTES
  10. File Name : Remove-AdminLogon
  11. Author : Thomas Lee - tfl@psp.co.uk
  12. Requires : PowerShell Version 2.0
  13. .LINK
  14. This script posted to:
  15. http://www.pshscripts.blogspot.com
  16. .EXAMPLE
  17. Psh> Remove-AdminLogon
  18. Auto logon settings removed
  19. #>
  20. Function Remove-AdminLogon {
  21. [Cmdletbinding()]
  22. Param()
  23. # Define registry path for autologon
  24. $RegPath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'
  25. # Remove autologon property
  26. Remove-ItemProperty -Path $RegPath -Name AutoAdminLogon
  27. # Remove userid and password
  28. Remove-ItemProperty -Path $RegPath -Name DefaultUserName
  29. Remove-ItemProperty -Path $RegPath -Name DefaultPassword
  30. # Say nice things and exit!
  31. Write-Host ("Auto logon removed")
  32. }
  33. Remove-AdminLogon
Technorati Tags: ,

New-AutoAdminLogon.ps1

  1. <# 
  2. .SYNOPSIS 
  3.     This script defines a function that sets autologon 
  4. .DESCRIPTION 
  5.     Autologon enables the system to logon after a reboot without 
  6.     you needing to enter credentials. This is an ideal scenario 
  7.     for lab or training room systems. This script defines 
  8.     a function that sets a userid/password and autologon. It does NOT 
  9.     check to see if the value entries already exist. 
  10. .NOTES 
  11.     File Name  : Set-AutoAdminLogon 
  12.     Author     : Thomas Lee - tfl@psp.co.uk 
  13.     Requires   : PowerShell Version 2.0 
  14. .LINK 
  15.     This script posted to: 
  16.         http://www.pshscripts.blogspot.com 
  17. .EXAMPLE 
  18.     Psh> Set-AutoAdminLogon -user cookham\tfl -password 'JerryGarciaR0cks!' 
  19.     Auto logon set for [Cookham\tfl] with password: [JerryGarciaR0cks]          
  20.  
  21. #> 
  22.  
  23. Function Set-AdminLogon { 
  24.  
  25. [cmdletbinding()] 
  26. Param( 
  27. [string] $User     = $(Throw 'No user id specified'), 
  28. [string] $Password = $(Throw 'No password specified'
  29.  
  30. # Define registry path for autologon 
  31. $RegPath = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' 
  32.  
  33. # Set autologon 
  34. New-ItemProperty -Path $RegPath -Name AutoAdminLogon -Value 1 -EA 0 
  35.  
  36. # Set userid and password 
  37. New-ItemProperty -Path $RegPath -Name DefaultUserName -Value $User -EA 0 
  38. New-ItemProperty -Path $regPath -Name DefaultPassword -Value $Password -EA 0 
  39.  
  40. # Say nice things and exit! 
  41. Write-Host ("Auto logon set for [{0}] with password: [{1}]" -f $user, $password
  42.  
  43. Set-AdminLogon -User 'Cookham\tfl' -Password 'JerryGarciaR0cks' 
Technorati Tags: ,

Friday, 23 November 2012

Convert-PptxToPDF.ps1

  1. <# 
  2. .SYNOPSIS 
  3.     This function converts a PPTx file into a PDF file 
  4. .DESCRIPTION 
  5.     The Convert-PptxToPDF function first creates an  
  6.     instance of PowerPoint, opens the $ifile and saves 
  7.     this to $ofile as a PDF file. 
  8. .NOTES 
  9.     File Name  : Convert-PptxToPDF 
  10.     Author     : Thomas Lee - tfl@psp.co.uk 
  11.     Requires   : PowerShell Version 3.0, Office 2010 
  12. .LINK 
  13.     This script posted to: 
  14.         http://www.pshscripts.blogspot.com 
  15.      
  16. .EXAMPLE 
  17.     There is nothing to see, except a set of new PDF Files in the output folder         
  18.  
  19. #> 
  20.  
  21. Function Convert-PptxToPDF { 
  22.  
  23. [CmdletBinding()] 
  24. Param( 
  25. $IFile
  26. $OFile 
  27.  
  28. # add key assemblies 
  29. Add-type -AssemblyName office -ErrorAction SilentlyContinue 
  30. Add-Type -AssemblyName microsoft.office.interop.powerpoint -ErrorAction SilentlyContinue 
  31.  
  32. # Open PowerPoint 
  33. $ppt = new-object -com powerpoint.application 
  34. $ppt.visible = [Microsoft.Office.Core.MsoTriState]::msoFalse 
  35.  
  36.  
  37. # Open the $Ifile presentation 
  38. $pres = $ppt.Presentations.Open($ifile
  39.  
  40. # Now save it away as PDF 
  41. $opt= [Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType]::ppSaveAsPDF 
  42. $pres.SaveAs($ofile,$opt
  43.  
  44. # and Tidy-up 
  45. $pres.Close() 
  46. $ppt.Quit() 
  47. $ppt=$null 
  48.  
  49.  
  50.  
  51. # Test it 
  52.  
  53. $ipath = "E:\SkyDrive\PowerShell V3 Geek Week\" 
  54.  
  55. Foreach ($ifile in $(ls $ipath -Filter "*.pptx")) { 
  56.   # Build name of output file 
  57.   $pathname = split-path $ifile 
  58.   $filename = split-path $ifile -leaf  
  59.   $file     = $filename.split(".")[0] 
  60.   $ofile    = $pathname + $file + ".pdf" 
  61.  
  62.   # Convert _this_ file to PDF 
  63.    Convert-PptxToPDF -ifile $ifile -OFile $ofile 
Technorati Tags: ,,,