Differences between revisions 2 and 18 (spanning 16 versions)
Revision 2 as of 2018-10-16 19:07:23
Size: 557
Editor: scot
Comment:
Revision 18 as of 2019-02-01 00:33:25
Size: 3838
Editor: scot
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:

<<TableOfContents>>

For the uninitiated:

|| Symbol || Meaning ||
|| % || shortcut for foreach object ||
|| $_ || current object in the pipeline ||
|| Get-Member || Will list the fields of the object you send it ||
|| Sort-Object -Property [property name] || Will sort the objects you send in by the property name(s) which can be a comma separated list ||
|| Where-Object {$_.property -like '*string*'} || Will filter the objects ||
|| Get-Command -Module PSWindowsUpdate || Lists all the commands in the PSWindowsUpdate module ||

= Windows and AD Scripts =
Line 5: Line 19:
{{{
Get-ADUser -Filter * -SearchBase "dc=home,dc=scotnpatti,dc=com" -ResultPageSize 0 -Prop CN,samaccountname,lastLogonTimestamp | select CN, samaccountname,@{n="lastLogonDate";e={[datetime]::FromFileTime($_.LastLogonTimestamp)}}
{{{#!highlight powershell
Get-ADUser -Filter * -SearchBase "dc=home,dc=scotnpatti,dc=com" -ResultPageSize 0 -Prop CN,samaccountname,lastLogonTimestamp |       select CN, samaccountname,@{n="lastLogonDate";e={[datetime]::FromFileTime($_.LastLogonTimestamp)}}
Line 11: Line 26:
{{{ {{{#!highlight powershell
Line 14: Line 29:


== List object from Registry - namely version of .NET installed ==

{{{#!highlight powershell
gci 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' | sort pschildname -des | foreach-object {$_.name; $_.GetValue("Version");}
}}}

== Remote commands ==

{{{#!highlight powershell
Invoke-Command -ComputerName eve -ScriptBlock { date }
}}}

== Replace a string in a file using a regular expression ==

So I downloaded a bunch of files from "the way back machine" site and I needed to update the hard-coded links to be relative site links. The following little script did it for me.

{{{#!highlight powershell

$files = ls Level*.html
foreach ($item in $files) {
    (Get-Content -path $item) | % { $_ -Replace '(https://web.archive.org/nebula/level)([0123456789]{2})/', 'Level$2.html' } | Set-Content $item
}

}}}

= SCVMM Powershell scripts =


I needed this once when I was trying to refresh the Library share. It failed on refresh with an error saying that a DVD was in use and wouldn't refresh until it was no longer in use. The following commands allowed me to identify the machines.

In general all of these need:

{{{#!highlight powershell
Import-Module VirtualMachineManager
}}}

== Get a list of Virtual Machines that have a DVD attached ==

{{{#!highlight powershell
Get-SCVMMServer -ComputerName Samuel
Get-SCVirtualMachine | Get-SCVirtualDVDDrive | Where-Object {$_.Connection -eq "ISOImage"} | Select Name, Connection, ISO
}}}

== List VMs at the end of the semester to be deleted ==

{{{#!highlight powershell
Get-SCVirtualMachine | Select Name, MarkedAsTemplate, Owner | Sort-Object -Property Owner, Name | Export-Csv -Path .\vms2019w.csv
}}}

== Setting up a Windows 2019 Server for the first time ==

{{{#!highlight powershell
# Install the AVMA key.
slmgr /ipk TNK62-RXVTB-4P47B-2D623-4GF74

# Set the timezone
# First I'm going to search for the timezone I want
Get-TimeZone -ListAvailable | Where-Object {$_.DisplayName -like '*Eastern*'}
# This gave me the parameter needed to set the time zone.
Set-TimeZone -Name "Eastern Standard Time"

# Set the Hostname of the computer:
Rename-Computer -NewName "windows2019" -Restart

# Next we need to install Windows update and get it started.
# This will install nuget package too.
Install-Module PSWindowsUpdate

# Now start the update process
# First we'll look at what updates are there
Get-WUInstall
# Now install them
Install-WindowsUpdate
}}}

Resources:

 * [[https://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc#content|Powershell and Windows Update]]

Here is a list of Power Shell Scripts that are too cool to ignore

For the uninitiated:

Symbol

Meaning

%

shortcut for foreach object

$_

current object in the pipeline

Get-Member

Will list the fields of the object you send it

Sort-Object -Property [property name]

Will sort the objects you send in by the property name(s) which can be a comma separated list

Where-Object {$_.property -like '*string*'}

Will filter the objects

Get-Command -Module PSWindowsUpdate

Lists all the commands in the PSWindowsUpdate module

Windows and AD Scripts

List of AD accounts and the last time they logged in

   1 Get-ADUser -Filter * -SearchBase "dc=home,dc=scotnpatti,dc=com" -ResultPageSize 0 -Prop CN,samaccountname,lastLogonTimestamp | 
   2      select CN, samaccountname,@{n="lastLogonDate";e={[datetime]::FromFileTime($_.LastLogonTimestamp)}} 

List Memory Installed

   1 Get-WmiObject win32_physicalmemory | Format-Table Manufacturer,Banklabel,Configuredclockspeed,Devicelocator,Capacity,Serialnumber -autosize

List object from Registry - namely version of .NET installed

   1 gci 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' | sort pschildname -des | foreach-object {$_.name; $_.GetValue("Version");}

Remote commands

   1 Invoke-Command -ComputerName eve -ScriptBlock { date }

Replace a string in a file using a regular expression

So I downloaded a bunch of files from "the way back machine" site and I needed to update the hard-coded links to be relative site links. The following little script did it for me.

   1 $files = ls Level*.html
   2 foreach ($item in $files) {
   3     (Get-Content -path $item) | % { $_ -Replace '(https://web.archive.org/nebula/level)([0123456789]{2})/', 'Level$2.html' } | Set-Content $item
   4 } 

SCVMM Powershell scripts

I needed this once when I was trying to refresh the Library share. It failed on refresh with an error saying that a DVD was in use and wouldn't refresh until it was no longer in use. The following commands allowed me to identify the machines.

In general all of these need:

   1 Import-Module VirtualMachineManager

Get a list of Virtual Machines that have a DVD attached

   1 Get-SCVMMServer -ComputerName Samuel
   2 Get-SCVirtualMachine | Get-SCVirtualDVDDrive | Where-Object {$_.Connection -eq "ISOImage"} | Select Name, Connection, ISO

List VMs at the end of the semester to be deleted

   1 Get-SCVirtualMachine | Select Name, MarkedAsTemplate, Owner | Sort-Object -Property Owner, Name | Export-Csv -Path .\vms2019w.csv

Setting up a Windows 2019 Server for the first time

   1 # Install the AVMA key.
   2 slmgr /ipk TNK62-RXVTB-4P47B-2D623-4GF74
   3 
   4 # Set the timezone 
   5 #  First I'm going to search for the timezone I want
   6 Get-TimeZone -ListAvailable | Where-Object {$_.DisplayName -like '*Eastern*'}
   7 #  This gave me the parameter needed to set the time zone. 
   8 Set-TimeZone -Name "Eastern Standard Time"
   9 
  10 # Set the Hostname of the computer:
  11 Rename-Computer -NewName "windows2019" -Restart
  12 
  13 # Next we need to install Windows update and get it started.
  14 # This will install nuget package too.
  15 Install-Module PSWindowsUpdate
  16 
  17 # Now start the update process
  18 #   First we'll look at what updates are there
  19 Get-WUInstall 
  20 #   Now install them
  21 Install-WindowsUpdate

Resources:

WindowsAdministration/PowerShellScripts (last edited 2024-08-30 00:21:07 by scot)