Differences between revisions 9 and 29 (spanning 20 versions)
Revision 9 as of 2019-01-09 21:07:03
Size: 2098
Editor: scot
Comment:
Revision 29 as of 2020-08-11 14:19:18
Size: 6414
Editor: scot
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:

<<TableOfContents>>
Line 8: Line 10:
|| 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. Also short cut notation: ? {$_.property -like '*string*'} ||
|| Get-Command -Module PSWindowsUpdate || Lists all the commands in the PSWindowsUpdate module ||

= Windows and AD Scripts =

== Expand all zip files into directories with zip name ==

{{{#!highlight powershell
$list = Get-ChildItem | ? { $_.Name -like "*.zip" } | select Name
foreach ($line in $list) {
    $parts = $line.Name.Split(".")
    $outDir = ".\" + $parts[0]
    $inFile = $line.Name
    mkdir $outDir
    Expand-Archive $inFile -DestinationPath $outDir
}
}}}


== List of Listening Ports with their owning programs ==

{{{#!highlight powershell
$listening = (Get-NetTCPConnection | ? {($_.State -eq "Listen") -and ($_.RemoteAddress -eq "0.0.0.0")})
foreach ($l in $listening) {
    $procid = $l.OwningProcess
    $proc = Get-Process -PID $procid | SELECT ID,ProcessName
    Write-Host $($l.LocalPort) "||" $($procid) "||" $proc.ProcessName
}
}}}
Line 48: Line 81:
== Get a list of Virtual Machines that have a DVD attached == == Adding DNS records to Windows DNS - For CPTR 446 class ==

{{{#!highlight powershell
Import-Csv googleips.csv | ForEach-Object {
    Add-DnsServerResourceRecordA -Name $_.DNSName -ComputerName dc1.cs.southern.edu -ZoneName cs.southern.edu $_.IP
}
}}}

= SCVMM Powershell scripts =
Line 52: Line 94:
In general all of these need:

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

== Get a list of Virtual Machines that have a DVD attached ==
Line 53: Line 103:
Line 56: Line 105:
}}}
Line 57: Line 107:
== 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
Line 58: Line 112:

== Get a list of VM Mac Addresses for CPTR 427 ==

{{{#!highlight powershell
Get-SCVirtualMachine | Where-Object { $_.Name -like "*427*" } | select -ExpandProperty VirtualNetworkAdapters | select MacAddress
}}}

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

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

#First run sconfig and setup the name, timezone and network, remote management and remote desktop. You can also setup windows update from here.
# To turn on or off the firewall
Get-NetFirewallProfile
# to set firewall on or off
Set-NetFirewallProfile -Name Domain,Public,Private -Enabled True

#Te get/set the firewall rule for private networks to allow any machine on a private network.
Get-NetFirewallRule | ? {$_.DisplayGroup -like "Windows Remote Management*" -and $_.Profile -like "*Private*"} | Get-NetFirewallAddressFilter #Shows the address filter
Get-NetFirewallRule | ? {$_.DisplayGroup -like "Windows Remote Management*" -and $_.Profile -like "*Private*"} | Set-NetFirewallRule -RemoteAddress 192.168.1.0/24

# 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
}}}

== Power shell to list of VM hard drives sizes ==

{{{#!highlight powershell
$vms = Get-SCVirtualDiskDrive -all
foreach ($v in $vms)
{
    $d = $v | select -ExpandProperty VirtualHardDisk
    Write-Output "$($v.Name), $($d.Size)"
}
}}}

== List the amount of memory used by virtual machines ==

{{{#!highlight powershell
Get-SCVirtualMachine | ForEach-Object { $size += $_.Memory }
}}}

Resources:

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

== Power Shell Scripts to create a NAT network (without DHCP) on Windows 10 ==

{{{#!highlight powershell
New-VMSwitch -SwitchName "CPTE230" -SwitchType Internal
Get-VMSwitch #just for show
Get-NetAdapter #get the ifIndex of your vEthernet adapter e.g. 67
New-NetIPAddress -IPAddress 192.168.1.1 -PrefixLength 24 -InterfaceIndex 67 #Using the network ifIndex found above, e.g. 67
New-NetNat -Name CPTE230NAT -InternalIPInterfaceAddressPrefix 192.168.1.0/24 #create the NAT
}}}

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. Also short cut notation: ? {$_.property -like '*string*'}

Get-Command -Module PSWindowsUpdate

Lists all the commands in the PSWindowsUpdate module

Windows and AD Scripts

Expand all zip files into directories with zip name

   1 $list = Get-ChildItem | ? { $_.Name -like "*.zip" } | select Name
   2 foreach ($line in $list) {
   3     $parts = $line.Name.Split(".")
   4     $outDir = ".\" + $parts[0]
   5     $inFile = $line.Name
   6     mkdir $outDir
   7     Expand-Archive $inFile -DestinationPath $outDir 
   8 }

List of Listening Ports with their owning programs

   1 $listening = (Get-NetTCPConnection | ? {($_.State -eq "Listen") -and ($_.RemoteAddress -eq "0.0.0.0")})
   2 foreach ($l in $listening) {
   3     $procid = $l.OwningProcess
   4     $proc = Get-Process -PID $procid | SELECT ID,ProcessName
   5     Write-Host $($l.LocalPort) "||" $($procid) "||" $proc.ProcessName
   6 }

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 } 

Adding DNS records to Windows DNS - For CPTR 446 class

   1 Import-Csv googleips.csv | ForEach-Object {
   2     Add-DnsServerResourceRecordA -Name $_.DNSName -ComputerName dc1.cs.southern.edu  -ZoneName cs.southern.edu $_.IP
   3 }

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

Get a list of VM Mac Addresses for CPTR 427

   1 Get-SCVirtualMachine | Where-Object { $_.Name -like "*427*" } | select -ExpandProperty VirtualNetworkAdapters | select MacAddress

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 #First run sconfig and setup the name, timezone and network, remote management and remote desktop. You can also setup windows update from here.
   5 # To turn on or off the firewall 
   6 Get-NetFirewallProfile
   7 # to set firewall on or off
   8 Set-NetFirewallProfile -Name Domain,Public,Private -Enabled True
   9 
  10 #Te get/set the firewall rule for private networks to allow any machine on a private network.
  11 Get-NetFirewallRule | ? {$_.DisplayGroup -like "Windows Remote Management*" -and $_.Profile -like "*Private*"} | Get-NetFirewallAddressFilter #Shows the address filter
  12 Get-NetFirewallRule | ? {$_.DisplayGroup -like "Windows Remote Management*" -and $_.Profile -like "*Private*"} | Set-NetFirewallRule -RemoteAddress 192.168.1.0/24
  13 
  14 # Next we need to install Windows update and get it started.
  15 # This will install nuget package too.
  16 Install-Module PSWindowsUpdate
  17 
  18 # Now start the update process
  19 #   First we'll look at what updates are there
  20 Get-WUInstall 
  21 #   Now install them
  22 Install-WindowsUpdate

Power shell to list of VM hard drives sizes

   1 $vms = Get-SCVirtualDiskDrive -all
   2 foreach ($v in $vms)
   3 {
   4     $d = $v | select -ExpandProperty VirtualHardDisk
   5     Write-Output "$($v.Name), $($d.Size)"
   6 }

List the amount of memory used by virtual machines

   1 Get-SCVirtualMachine | ForEach-Object { $size += $_.Memory }

Resources:

Power Shell Scripts to create a NAT network (without DHCP) on Windows 10

   1 New-VMSwitch -SwitchName "CPTE230" -SwitchType Internal
   2 Get-VMSwitch #just for show
   3 Get-NetAdapter #get the ifIndex of your vEthernet adapter e.g. 67
   4 New-NetIPAddress -IPAddress 192.168.1.1 -PrefixLength 24 -InterfaceIndex 67 #Using the network ifIndex found above, e.g. 67
   5 New-NetNat -Name CPTE230NAT -InternalIPInterfaceAddressPrefix 192.168.1.0/24 #create the NAT 

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