lab11.ps1

🧩 Syntax:
<#
  timpe: ~8 minutes 41 seconds
#>

# Variables
$ErrorActionPreference = "stop"

# path
$pth_usrPrf = "C:\Users\Default"
$pth_AppData = "C:\Users\Default\AppData\Roaming"
$pth_OneDriveSetup = "C:\Windows\SysWOW64\OneDriveSetup.exe"
# taskBar
$pth_PinnedTaskBar = "C:\Users\Default\AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
# ddl x64
$pth_ddlX64 = "$env:winDir\system32"
# ddl x32
$pth_ddlX32 = "$env:winDir\SysWOW64\"
# drivers
$pth_drivers = "$env:winDir\system32\drivers"
# shell:startUp
$pth_StartUp = ni "C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\StartUp" -type directory

# ddl-gns3 (93.3M)
$URL_gns3 = "https://downloads.solarwinds.com/solarwinds/GNS3/v2.2.32/GNS3-2.2.32-all-in-one-regular.exe"

# empty30G_qcow2 (FG)
$URL_empty30G_qcow2  = "https://cfhcable.dl.sourceforge.net/project/gns-3/Empty%20Qemu%20disk/empty30G.qcow2"
# SW_iosv_2020.qcow2
$URL_sw_iosv_2020_qcow2 = "https://master.dl.sourceforge.net/project/images/SW_iosv_2020.qcow2?viasf=1"
# FGT6.4.7.qcow2
$URL_FGT6_4_7_qcow2 = "https://master.dl.sourceforge.net/project/images/FGT6.4.7.qcow2?viasf=1"
# rt_159-3.m4.qcow
$URL_vios_159_3_m4_qcow2 = "https://master.dl.sourceforge.net/project/images/qcow2/vios_159-3.m4.qcow2?viasf=1"
# iosV_startup_config.img (router)
$URL_iosv_startup_cfg_img = "https://master.dl.sourceforge.net/project/images/qcow2/iosv_startup_config.img?viasf=1"

# fortinet.svg
$URL_fortinet_svg = "https://master.dl.sourceforge.net/project/images/fortinet.svg?viasf=1"
# firefox.svg
$URL_firefox_svg = "https://master.dl.sourceforge.net/project/images/firefox.svg?viasf=1"

# gns3_server.ini (appData)
$URL_gns3_server_ini = "https://master.dl.sourceforge.net/project/images/gns3_server.ini?viasf=1"
# gns3_controller_ini (appData)
$URL_gns3_controller_ini = "https://master.dl.sourceforge.net/project/images/AppData/02-06-2022/gns3_controller.ini?viasf=1"

# Packet dll_x64
$URL_packet_x64 = "https://master.dl.sourceforge.net/project/images/System32/Packet.dll?viasf=1"
# wpcap ddl_x32
$URL_wpcap_x32 = "https://master.dl.sourceforge.net/project/images/SysWOW64/wpcap.dll?viasf=1"
# pthreadVC.dll
$URL_pthreadVC_x32 = "https://master.dl.sourceforge.net/project/images/SysWOW64/pthreadVC.dll?viasf=1"
# Packet ddl_x32
$URL_packet_x32 = "https://master.dl.sourceforge.net/project/images/SysWOW64/Packet.dll?viasf=1"
# npf.sys
$URL_npf_sys = "https://master.dl.sourceforge.net/project/images/drivers/npf.sys?viasf=1"
# rpcapd.exe in InstallDir\WinPcap
$URL_rpcapd_exe = "https://altushost-swe.dl.sourceforge.net/project/images/ProgramFilesX86/rpcapd.exe"

# winPcap (tmp - bypass checkUp from gns3.exe)
$URL_winPcap_msi = "http://www.win10pcap.org/download/Win10Pcap-v10.2-5002.msi"

# ScriptLogon
$URL_ScriptLogon = "https://raw.githubusercontent.com/pc-aide/Windows/master/PowerShell/ARM/gns3_%26_loopback/StartUp/ScriptLogon/11-06-2022.ps1"

# NTUSER.DAT
$URL_ntuser = "https://master.dl.sourceforge.net/project/images/NTUSER.DAT/NTUSER.DAT?viasf=1"

# gns3_gui.ini
$fil_gns3_gui = @"
{
    "Builtin": {
        "default_nat_interface": "vmnet8"
    },
    "Docker": {
        "containers": []
    },
    "Dynamips": {
        "allocate_aux_console_ports": false,
        "dynamips_path": "",
        "ghost_ios_support": true,
        "mmap_support": true,
        "sparse_memory_support": true
    },
    "GraphicsView": {
        "default_label_color": "#000000",
        "default_label_font": "TypeWriter,10,-1,5,75,0,0,0,0,0",
        "default_note_color": "#000000",
        "default_note_font": "TypeWriter,10,-1,5,75,0,0,0,0,0",
        "draw_link_status_points": true,
        "draw_rectangle_selected_item": false,
        "drawing_grid_size": 25,
        "grid_size": 75,
        "limit_size_node_symbols": true,
        "scene_height": 1000,
        "scene_width": 2000,
        "show_grid": false,
        "show_grid_on_new_project": false,
        "show_interface_labels": false,
        "show_interface_labels_on_new_project": false,
        "show_layers": false,
        "snap_to_grid": false,
        "snap_to_grid_on_new_project": false,
        "zoom": null
    },
    "IOU": {
        "iourc_content": "",
        "license_check": true
    },
    "MainWindow": {
        "check_for_update": true,
        "debug_level": 0,
        "delay_console_all": 1500,
        "direct_file_upload": false,
        "experimental_features": false,
        "geometry": "AdnQywADAAAAAAHSAAAAgwAABa0AAANuAAAB0wAAAKIAAAWsAAADbQAAAAAAAAAAB4AAAAHTAAAAogAABawAAANt",
        "hdpi": true,
        "hide_getting_started_dialog": false,
        "hide_new_template_button": false,
        "hide_setup_wizard": true,
        "last_check_for_update": 0,
        "multi_profiles": false,
        "overlay_notifications": true,
        "recent_files": [],
        "recent_projects": [],
        "send_stats": true,
        "spice_console_command": "\"C:\\Program Files\\VirtViewer v7.0-256\\bin\\remote-viewer.exe\" spice://%h:%p",
        "state": "AAAA/wAAAAD9AAAAAwAAAAAAAAAAAAAAAPwCAAAAAfsAAAAiAHUAaQBOAG8AZABlAHMARABvAGMAawBXAGkAZABnAGUAdAAAAAAA/////wAAAIcA////AAAAAQAAAQAAAAGT/AIAAAAC+wAAADYAdQBpAFQAbwBwAG8AbABvAGcAeQBTAHUAbQBtAGEAcgB5AEQAbwBjAGsAVwBpAGQAZwBlAHQBAAAAQwAAAMcAAABZAP////sAAAA0AHUAaQBDAG8AbQBwAHUAdABlAFMAdQBtAG0AYQByAHkARABvAGMAawBXAGkAZABnAGUAdAEAAAEQAAAAxgAAAFkA////AAAAAwAAA5oAAADT/AEAAAAB+wAAACYAdQBpAEMAbwBuAHMAbwBsAGUARABvAGMAawBXAGkAZABnAGUAdAEAAABAAAADmgAAAEYAB///AAAClAAAAZMAAAAEAAAABAAAAAgAAAAI/AAAAAIAAAAAAAAAAQAAACIAdQBpAEIAcgBvAHcAcwBlAHIAcwBUAG8AbwBsAEIAYQByAwAAAAD/////AAAAAAAAAAAAAAACAAAAAwAAACAAdQBpAEcAZQBuAGUAcgBhAGwAVABvAG8AbABCAGEAcgEAAAAA/////wAAAAAAAAAAAAAAIAB1AGkAQwBvAG4AdAByAG8AbABUAG8AbwBsAEIAYQByAQAAAGL/////AAAAAAAAAAAAAAAmAHUAaQBBAG4AbgBvAHQAYQB0AGkAbwBuAFQAbwBvAGwAQgBhAHIBAAABmP////8AAAAAAAAAAA==",
        "stats_visitor_id": "bdde99d6-7b08-4a90-9d18-144f902e683a",
        "style": "Classic",
        "symbol_theme": "Classic",
        "telnet_console_command": "Solar-PuTTY.exe --telnet --hostname %h --port %p  --name \"%d\"",
        "vnc_console_command": "tvnviewer.exe %h:%p"
    },
    "NodesView": {
        "nodes_view_filter": 0
    },
    "Qemu": {
        "enable_hardware_acceleration": true,
        "require_hardware_acceleration": true
    },
    "VMware": {
        "block_host_traffic": true,
        "host_type": "ws",
        "vmnet_end_range": 19,
        "vmnet_start_range": 2,
        "vmrun_path": ""
    },
    "VPCS": {
        "vpcs_path": ""
    },
    "VirtualBox": {
        "vboxmanage_path": ""
    },
    "type": "settings",
    "version": "2.2.32"
}
"@

# test.gn3 - file
$fil_test_gns3 = @"
{
    "auto_close": true,
    "auto_open": false,
    "auto_start": false,
    "drawing_grid_size": 25,
    "grid_size": 75,
    "name": "test",
    "project_id": "a755b1fc-5c72-4a35-aae9-b1ff3cf7092c",
    "revision": 9,
    "scene_height": 1000,
    "scene_width": 2000,
    "show_grid": false,
    "show_interface_labels": true,
    "show_layers": false,
    "snap_to_grid": false,
    "supplier": null,
    "topology": {
        "computes": [
            {
                "compute_id": "2e0d1578-d11f-46cf-b22b-d02aa3a5d426",
                "host": "gns3",
                "name": "gns3",
                "port": 3080,
                "protocol": "http"
            }
        ],
        "drawings": [],
        "links": [
            {
                "filters": {},
                "link_id": "cd72c182-551c-4ba5-a333-f913b1ab0bb8",
                "link_style": {},
                "nodes": [
                    {
                        "adapter_number": 2,
                        "label": {
                            "rotation": 0,
                            "style": "font-family: TypeWriter;font-size: 10.0;font-weight: bold;fill: #000000;fill-opacity: 1.0;",
                            "text": "Port3",
                            "x": 39,
                            "y": 64
                        },
                        "node_id": "375ab30d-530e-45f8-9de6-897ea2f600d4",
                        "port_number": 0
                    },
                    {
                        "adapter_number": 0,
                        "label": {
                            "rotation": 0,
                            "style": "font-family: TypeWriter;font-size: 10.0;font-weight: bold;fill: #000000;fill-opacity: 1.0;",
                            "text": "Loopback",
                            "x": 48,
                            "y": -16
                        },
                        "node_id": "5861eb87-977e-4c84-b6c1-161acab661ce",
                        "port_number": 1
                    }
                ],
                "suspend": false
            }
        ],
        "nodes": [
            {
                "compute_id": "local",
                "console": null,
                "console_auto_start": false,
                "console_type": "none",
                "custom_adapters": [],
                "first_port_name": null,
                "height": 60,
                "label": {
                    "rotation": 0,
                    "style": "font-family: TypeWriter;font-size: 10.0;font-weight: bold;fill: #000000;fill-opacity: 1.0;",
                    "text": "MGMT",
                    "x": 5,
                    "y": 70
                },
                "locked": false,
                "name": "MGMT",
                "node_id": "5861eb87-977e-4c84-b6c1-161acab661ce",
                "node_type": "cloud",
                "port_name_format": "Ethernet{0}",
                "port_segment_size": 0,
                "properties": {
                    "interfaces": [
                        {
                            "name": "Ethernet",
                            "special": false,
                            "type": "ethernet"
                        },
                        {
                            "name": "Loopback",
                            "special": true,
                            "type": "ethernet"
                        }
                    ],
                    "ports_mapping": [
                        {
                            "interface": "Ethernet",
                            "name": "Ethernet",
                            "port_number": 0,
                            "type": "ethernet"
                        },
                        {
                            "interface": "Loopback",
                            "name": "Loopback",
                            "port_number": 1,
                            "type": "ethernet"
                        }
                    ],
                    "remote_console_host": "",
                    "remote_console_http_path": "/",
                    "remote_console_port": 23,
                    "remote_console_type": "none"
                },
                "symbol": ":/symbols/affinity/circle/red/client.svg",
                "template_id": "39e257dc-8412-3174-b6b3-0ee3ed6a43e9",
                "width": 60,
                "x": -99,
                "y": 97,
                "z": 1
            },
            {
                "compute_id": "2e0d1578-d11f-46cf-b22b-d02aa3a5d426",
                "console": 5000,
                "console_auto_start": false,
                "console_type": "telnet",
                "custom_adapters": [],
                "first_port_name": "",
                "height": 50,
                "label": {
                    "rotation": 0,
                    "style": "font-family: TypeWriter;font-size: 10.0;font-weight: bold;fill: #000000;fill-opacity: 1.0;",
                    "text": "FG-1",
                    "x": 17,
                    "y": -25
                },
                "locked": false,
                "name": "FG-1",
                "node_id": "375ab30d-530e-45f8-9de6-897ea2f600d4",
                "node_type": "qemu",
                "port_name_format": "Port{port1}",
                "port_segment_size": 0,
                "properties": {
                    "adapter_type": "e1000",
                    "adapters": 10,
                    "bios_image": "",
                    "bios_image_md5sum": null,
                    "boot_priority": "c",
                    "cdrom_image": "",
                    "cdrom_image_md5sum": null,
                    "cpu_throttling": 0,
                    "cpus": 1,
                    "create_config_disk": false,
                    "hda_disk_image": "FGT6.4.7.qcow2",
                    "hda_disk_image_md5sum": "dcdf7bf5e1ff85c64638c1dfaa48ff65",
                    "hda_disk_interface": "virtio",
                    "hdb_disk_image": "empty30G.qcow2",
                    "hdb_disk_image_md5sum": "3411a599e822f2ac6be560a26405821a",
                    "hdb_disk_interface": "virtio",
                    "hdc_disk_image": "",
                    "hdc_disk_image_md5sum": null,
                    "hdc_disk_interface": "none",
                    "hdd_disk_image": "",
                    "hdd_disk_image_md5sum": null,
                    "hdd_disk_interface": "none",
                    "initrd": "",
                    "initrd_md5sum": null,
                    "kernel_command_line": "",
                    "kernel_image": "",
                    "kernel_image_md5sum": null,
                    "legacy_networking": false,
                    "linked_clone": true,
                    "mac_address": "0c:5a:b3:0d:00:00",
                    "on_close": "power_off",
                    "options": "",
                    "platform": "x86_64",
                    "process_priority": "normal",
                    "qemu_path": "/usr/bin/qemu-system-x86_64",
                    "ram": 1024,
                    "replicate_network_connection_state": true,
                    "usage": "Default username is admin, no password is set."
                },
                "symbol": "fortinet.svg",
                "template_id": "ef90e3b5-4b61-42e3-8396-d807d5a684af",
                "width": 70,
                "x": -104,
                "y": -99,
                "z": 1
            }
        ]
    },
    "type": "topology",
    "variables": null,
    "version": "2.2.32",
    "zoom": 100
}
"@

# loopback
$loopbackName = "Loopback"
# loopback nic
$primary_interface = "Ethernet"

# Pckg Nuget
# Find-PackageProvider -Name "NuGet" -AllVersions
Install-PackageProvider -Name "NuGet" -RequiredVersion " 2.8.5.208" -Force
# Modules
Install-Module -Name LoopbackAdapter -MinimumVersion 1.2.0.0 -Force

# New NIC
New-LoopbackAdapter -Name $loopbackName -Force

# NIC_loopback
$interface_loopback = Get-NetAdapter -Name $loopbackName
$interface_main = Get-NetAdapter -Name $primary_interface

# IP
$loopback_ipv4 = '192.168.3.10'
# Subnet mask
$loopback_ipv4_length = '24'

# Set the IPv4 address
New-NetIPAddress -InterfaceAlias $loopbackName -IPAddress $loopback_ipv4 `
  -PrefixLength $loopback_ipv4_length -AddressFamily ipv4

# UserProfile
cd $pth_usrPrf
'images','configs','projects','symbols' | 
  % {ni -Name ".\GNS3\$_" -ItemType 'Directory' -EA 0}
# QEMU
$pth_QEMU = ni $pth_usrPrf\GNS3\images -Name QEMU -Type Directory
# AppData
$pth_AppData_2_2 = ni $pth_AppData\GNS3 -Name 2.2 -Type Directory
# symbols
$pth_symbols = "$pth_usrPrf\GNS3\symbols"
# projects
$pth_projects = "$pth_usrPrf\GNS3\projects"

# gns3-app
Start-BitsTransfer -Source $URL_gns3 `
  -Destination "d:\gns3.exe" -EA 0

# SW_iosv_2020.qcow2
Start-BitsTransfer -Source $URL_sw_iosv_2020_qcow2 `
  -Destination "$pth_QEMU\SW_iosv_2020.qcow2" -EA 0
# FGT6.4.7.qcow2
Start-BitsTransfer -Source $URL_FGT6_4_7_qcow2 `
  -Destination "$pth_QEMU\FGT6.4.7.qcow2" -EA 0
# vios_159-3.m4.qcow2
Start-BitsTransfer -Source $URL_vios_159_3_m4_qcow2 `
  -Destination "$pth_QEMU\vios_159-3.m4.qcow2" -EA 0
# iosv_startup_config.img
Start-BitsTransfer -Source $URL_iosv_startup_cfg_img `
  -Destination "$pth_QEMU\iosv_startup_config.img" -EA 0
# empty30G.qcow2
Start-BitsTransfer -Source $URL_empty30G_qcow2 `
  -Destination $pth_QEMU\empty30G.qcow2 -EA 0
  
# fortinet.svg
Start-BitsTransfer -Source $URL_fortinet_svg `
  -Destination "$pth_symbols\fortinet.svg" -EA 0
# $URL_firefox.svg
Start-BitsTransfer -Source $URL_firefox_svg `
  -Destination "$pth_symbols\firefox.svg" -EA 0
  
# gns3_server.ini (appData)
Start-BitsTransfer -Source $URL_gns3_server_ini `
  -Destination "$pth_AppData_2_2\gns3_server.ini" -EA 0
# gns3_controller.ini (appData)
Start-BitsTransfer -Source $URL_gns3_controller_ini `
  -Destination "$pth_AppData_2_2\gns3_controller.ini" -EA 0
# gn3_gui.ini
$fil_gns3_gui | out-file "$pth_AppData_2_2\gns3_gui.ini" -Encoding ascii
  
# project files
try{
  $fil_test_gns3 | out-file $pth_usrPrf\GNS3\projects\test.gns3 -Encoding ascii
}catch{
  $Error[0] | out-file d:\ErrorTest.gns3.log
}

# acl.default (Access to the path is denied) ACL: read,execute
$acl = get-acl $pth_OneDriveSetup
# new rule
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("nt authority\system","FullControl","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl $pth_OneDriveSetup

# Block autoInstall OneDrive to a NewUser
try{
  ri $pth_OneDriveSetup -force  
}catch{
  $erro[0] | out-file "d:\ErrorRemoveOneDriveSetup.log"
}

# Turn off the Network Location wizard
ni HKLM:\System\CurrentControlSet\Control\Network\ -Name NewNetworkWindowOff

# Disable Privacy Settings Experience Using 
ni HKLM:\SOFTWARE\Policies\Microsoft\Windows\ -Name OOBE
New-ItemProperty HKLM:\SOFTWARE\Policies\Microsoft\Windows\OOBE `
  -Name DisablePrivacyExperience -Type DWord -Value 1
  
# Disable First run welcome page Edge
ni HKLM:\SOFTWARE\Policies\Microsoft\ -Name Edge
New-ItemProperty HKLM:\SOFTWARE\Policies\Microsoft\Edge\ `
  -Name HideFirstRunExperience -Type DWord -Value 1
  
# Remove icons pinned to TaskBar
# try this in futur : Import-StartLayout -MountPath $env:systemdrive\ -LayoutPath "StartLayout.bin"
#ri "C:\Users\Default\AppData\Local\Microsoft\Windows\Shell\*" -EA 0
  
# bypass checkUp gns3 wiht win10Pcap.msi
try{
  Start-BitsTransfer -Source $URL_winPcap_msi `
    -Destination "d:\win10Pcap.msi"
}catch{
  $Error[0] | out-file d:\ErrorInstallWin10Pcap_msi.log
}

# install silent Win10Pcap.msi
try{
  start msiExec -args "/i d:\win10Pcap.msi /q /l* d:\InstallW10Pcap_msi.log"
}catch{
  $Error[0] | out-file d:\ErrorInstallWin10Pcap_msi.log
}

# Install silent gns3.exe
try{
  start d:\gns3.exe -args "/S" -wait
}catch{
  $Error[0] | out-file ErrorInstallGns3.log
}

# uninstall W10Pcap.msi (deprecated files ddl)
try{
  start msiExec -args "/x {B5B58F8A-1984-4F3E-B400-235A6E005002} /q /l* d:\UninstallWin10Pcap_msi.log"
}catch{
  $Error[0] | out-file d:\ErrorUninstallWin10Pcap_msi.log
}

# InstallDir WinPcap
try{
  $pth_winPcap = ni ${env:ProgramFiles(x86)} -Name WinPcap -Type Directory
}catch{
  $Error[0] | out-file d:\ErroInstallDirWinPcap.log
}

# packet.dll x64
try{
  Start-BitsTransfer -Source $URL_packet_x64 `
    -Destination "$pth_ddlX64\Packet.dll"
}catch{
  $Error[0] | out-file d:\ErrorPacket_ddl_x64.log
}
# npf.sys
try{
  Start-BitsTransfer -Source $URL_npf_sys `
   -Destination "$pth_drivers\npf.sys"
}catch{
  $Error[0] | out-file d:\ErrorNpf_drivers_x64.log
}
# wpcap.dll x32
try{
  Start-BitsTransfer -Source $URL_wpcap_x32 `
   -Destination "$pth_ddlX32\wpcap.dll"
}catch{
  $Error[0] | out-file d:\ErrorWpcap_ddl_x32.log
}
# packet.dll x32
try{
  Start-BitsTransfer -Source $URL_packet_x32 `
   -Destination "$pth_ddlX32\Packet.dll"
}catch{
  $Error[0] | out-file d:\ErrorPacket_ddl_x32.log
}
# rpcapd.exe
try{
  Start-BitsTransfer -Source $URL_rpcapd_exe `
   -Destination "$pth_winPcap\rpcapd.exe"
}catch{
  $Error[0] | out-file d:\ErrorRpcapd_exe_InstallDirWinPcap.log
}

# app & 1st service
sc.exe create rpcapd type= own start= demand binPath= "$pth_winPcap\rpcad.exe" DisplayName= "Remote Package Capture Protocol..."
# driver (*.sys - 2e service)
sc.exe create npf binPath= "system32\drivers\npf.sys" type= kernel start= auto error= normal tag= no DisplayName= "NetGroup Packet Filter Driver"
# start-service
try{
  sc.exe start npf  
}catch{
  $Error[0] | out-file d:\Error2StartServiceNpf_sys.log
}

# ntuser.dat
try{
start-BitsTransfer $URL_ntuser `
  -Destination "$pth_usrPrf\NTUSER.DAT"
}catch{
  $Error[0] | out-file d:\ErrorNTUser.dat.log
}