Shopfloor PC type system, webapp enhancements, slim Blancco GRUB
- Shopfloor PC type menu (CMM, WaxAndTrace, Keyence, Genspect, Display, Standard) - Baseline scripts: OpenText CSF, Start Menu shortcuts, network/WinRM, power/display - Standard type: eDNC + MarkZebra with 64-bit path mirroring - CMM type: Hexagon CLM Tools, PC-DMIS 2016/2019 R2 - Display sub-type: Lobby vs Dashboard - Webapp: enrollment management, image config editor, UI refresh - Upload-Image.ps1: robocopy MCL cache to PXE server - Download-Drivers.ps1: Dell driver download pipeline - Slim Blancco GRUB EFI (10MB -> 660KB) for old hardware compat - Shopfloor display imaging guide docs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -87,6 +87,16 @@
|
||||
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path>
|
||||
<Description>Bypass OOBE network requirement</Description>
|
||||
</RunSynchronousCommand>
|
||||
<RunSynchronousCommand wcm:action="add">
|
||||
<Order>14</Order>
|
||||
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v SkipMachineOOBE /t REG_DWORD /d 1 /f</Path>
|
||||
<Description>Skip machine OOBE phase</Description>
|
||||
</RunSynchronousCommand>
|
||||
<RunSynchronousCommand wcm:action="add">
|
||||
<Order>15</Order>
|
||||
<Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v SkipUserOOBE /t REG_DWORD /d 1 /f</Path>
|
||||
<Description>Skip user OOBE phase</Description>
|
||||
</RunSynchronousCommand>
|
||||
</RunSynchronous>
|
||||
</component>
|
||||
</settings>
|
||||
@@ -151,11 +161,16 @@
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>5</Order>
|
||||
<CommandLine>powershell.exe -ExecutionPolicy Bypass -Command "Get-NetAdapter -Physical | Where-Object { $_.InterfaceDescription -notmatch 'Wi-Fi|Wireless' } | Disable-NetAdapter -Confirm:$false; while (-not (Test-Connection -ComputerName login.microsoftonline.us -Count 1 -Quiet -ErrorAction SilentlyContinue)) { Start-Sleep -Seconds 5 }; Write-Host 'Internet confirmed over WiFi.'"</CommandLine>
|
||||
<Description>Disable wired adapters and wait for WiFi internet</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>6</Order>
|
||||
<CommandLine>powershell.exe -ExecutionPolicy Bypass -File "C:\run-enrollment.ps1"</CommandLine>
|
||||
<Description>Run GCCH Enrollment</Description>
|
||||
</SynchronousCommand>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>6</Order>
|
||||
<SynchronousCommand wcm:action="add">
|
||||
<Order>7</Order>
|
||||
<CommandLine>powershell.exe -ExecutionPolicy Bypass -File "C:\Enrollment\Run-ShopfloorSetup.ps1"</CommandLine>
|
||||
<Description>Run shopfloor PC type setup</Description>
|
||||
</SynchronousCommand>
|
||||
|
||||
@@ -37,11 +37,12 @@
|
||||
- gea-standard
|
||||
- gea-engineer
|
||||
- gea-shopfloor
|
||||
- gea-shopfloor-mce
|
||||
- ge-standard
|
||||
- ge-engineer
|
||||
- ge-shopfloor-lockdown
|
||||
- ge-shopfloor-mce
|
||||
shopfloor_types:
|
||||
- gea-shopfloor
|
||||
deploy_subdirs:
|
||||
- Applications
|
||||
- Control
|
||||
@@ -298,6 +299,36 @@
|
||||
state: directory
|
||||
mode: '0777'
|
||||
|
||||
- name: "Create enrollment packages directory"
|
||||
file:
|
||||
path: /srv/samba/enrollment
|
||||
state: directory
|
||||
mode: '0777'
|
||||
|
||||
- name: "Deploy shopfloor setup scripts to enrollment share"
|
||||
copy:
|
||||
src: "{{ usb_mount }}/shopfloor-setup/"
|
||||
dest: /srv/samba/enrollment/shopfloor-setup/
|
||||
mode: '0755'
|
||||
directory_mode: '0755'
|
||||
ignore_errors: yes
|
||||
|
||||
- name: "Create BIOS update directory on enrollment share"
|
||||
file:
|
||||
path: /srv/samba/enrollment/BIOS
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: "Deploy BIOS check script and manifest"
|
||||
copy:
|
||||
src: "{{ usb_mount }}/shopfloor-setup/BIOS/{{ item }}"
|
||||
dest: /srv/samba/enrollment/BIOS/{{ item }}
|
||||
mode: '0644'
|
||||
loop:
|
||||
- check-bios.cmd
|
||||
- models.txt
|
||||
ignore_errors: yes
|
||||
|
||||
- name: "Create image upload staging directory"
|
||||
file:
|
||||
path: /home/pxe/image-upload
|
||||
@@ -348,6 +379,15 @@
|
||||
force user = root
|
||||
comment = Blancco Drive Eraser reports
|
||||
|
||||
[enrollment]
|
||||
path = /srv/samba/enrollment
|
||||
browseable = yes
|
||||
read only = no
|
||||
guest ok = no
|
||||
valid users = pxe-upload
|
||||
force user = root
|
||||
comment = GCCH bulk enrollment packages
|
||||
|
||||
[image-upload]
|
||||
path = /home/pxe/image-upload
|
||||
browseable = yes
|
||||
@@ -357,6 +397,9 @@
|
||||
force user = pxe
|
||||
force group = pxe
|
||||
comment = PXE image upload staging area
|
||||
oplocks = no
|
||||
level2 oplocks = no
|
||||
strict sync = yes
|
||||
|
||||
- name: "Create Samba users (pxe-upload and blancco)"
|
||||
shell: |
|
||||
@@ -392,6 +435,15 @@
|
||||
force: no
|
||||
loop: "{{ image_types }}"
|
||||
|
||||
- name: "Deploy shopfloor unattend.xml template"
|
||||
copy:
|
||||
src: "{{ usb_mount }}/FlatUnattendW10-shopfloor.xml"
|
||||
dest: "{{ samba_share }}/{{ item }}/Deploy/FlatUnattendW10.xml"
|
||||
mode: '0644'
|
||||
force: no
|
||||
loop: "{{ shopfloor_types }}"
|
||||
ignore_errors: yes
|
||||
|
||||
- name: "Daily cron to create/refresh Media.tag for all images"
|
||||
copy:
|
||||
content: |
|
||||
@@ -635,6 +687,7 @@
|
||||
Environment=CLONEZILLA_SHARE=/srv/samba/clonezilla
|
||||
Environment=WEB_ROOT={{ web_root }}
|
||||
Environment=BLANCCO_REPORTS=/srv/samba/blancco-reports
|
||||
Environment=ENROLLMENT_SHARE=/srv/samba/enrollment
|
||||
Environment=AUDIT_LOG=/var/log/pxe-webapp-audit.log
|
||||
ExecStart=/usr/bin/python3 app.py
|
||||
Restart=always
|
||||
|
||||
158
playbook/shopfloor-setup/BIOS/check-bios.cmd
Normal file
158
playbook/shopfloor-setup/BIOS/check-bios.cmd
Normal file
@@ -0,0 +1,158 @@
|
||||
@echo off
|
||||
REM check-bios.cmd - Check and apply Dell BIOS update from WinPE x64
|
||||
REM Called from startnet.cmd before imaging menu
|
||||
REM Requires: Flash64W.exe (Dell 64-Bit BIOS Flash Utility) in same directory
|
||||
REM
|
||||
REM Exit behavior:
|
||||
REM - BIOS update applied -> reboots automatically (flashes during POST)
|
||||
REM - Already up to date -> returns to startnet.cmd
|
||||
REM - No match / no files -> returns to startnet.cmd
|
||||
|
||||
set BIOSDIR=%~dp0
|
||||
set FLASH=%BIOSDIR%Flash64W.exe
|
||||
set MANIFEST=%BIOSDIR%models.txt
|
||||
|
||||
if not exist "%FLASH%" (
|
||||
echo Flash64W.exe not found, skipping BIOS check.
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
if not exist "%MANIFEST%" (
|
||||
echo models.txt not found, skipping BIOS check.
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
REM --- Get system model from WMI ---
|
||||
set SYSMODEL=
|
||||
for /f "skip=1 tokens=*" %%M in ('wmic csproduct get name 2^>NUL') do (
|
||||
if not defined SYSMODEL set "SYSMODEL=%%M"
|
||||
)
|
||||
REM Trim trailing whitespace
|
||||
for /f "tokens=*" %%a in ("%SYSMODEL%") do set "SYSMODEL=%%a"
|
||||
|
||||
if "%SYSMODEL%"=="" (
|
||||
echo Could not detect system model, skipping BIOS check.
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
echo Model: %SYSMODEL%
|
||||
|
||||
REM --- Get current BIOS version ---
|
||||
set BIOSVER=
|
||||
for /f "skip=1 tokens=*" %%V in ('wmic bios get smbiosbiosversion 2^>NUL') do (
|
||||
if not defined BIOSVER set "BIOSVER=%%V"
|
||||
)
|
||||
for /f "tokens=*" %%a in ("%BIOSVER%") do set "BIOSVER=%%a"
|
||||
echo Current BIOS: %BIOSVER%
|
||||
|
||||
REM --- Read manifest and find matching BIOS file ---
|
||||
REM Format: ModelSubstring|BIOSFile|Version
|
||||
set BIOSFILE=
|
||||
set TARGETVER=
|
||||
for /f "usebackq eol=# tokens=1,2,3 delims=|" %%A in ("%MANIFEST%") do (
|
||||
echo "%SYSMODEL%" | find /I "%%A" >NUL
|
||||
if not errorlevel 1 (
|
||||
set "BIOSFILE=%%B"
|
||||
set "TARGETVER=%%C"
|
||||
goto :found_bios
|
||||
)
|
||||
)
|
||||
|
||||
echo No BIOS update available for this model.
|
||||
exit /b 0
|
||||
|
||||
:found_bios
|
||||
if not exist "%BIOSDIR%%BIOSFILE%" (
|
||||
echo WARNING: %BIOSFILE% not found in BIOS folder.
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
REM --- Skip if already at target version ---
|
||||
echo.%BIOSVER%| find /I "%TARGETVER%" >NUL
|
||||
if not errorlevel 1 goto :already_current
|
||||
|
||||
REM --- Compare versions to prevent downgrade ---
|
||||
REM Split current and target into major.minor.patch and compare numerically
|
||||
call :compare_versions "%BIOSVER%" "%TARGETVER%"
|
||||
if "%VERCMP%"=="newer" goto :already_newer
|
||||
goto :do_flash
|
||||
|
||||
:already_current
|
||||
echo BIOS is already up to date - %TARGETVER%
|
||||
exit /b 0
|
||||
|
||||
:already_newer
|
||||
echo Current BIOS %BIOSVER% is newer than target %TARGETVER% - skipping.
|
||||
exit /b 0
|
||||
|
||||
:do_flash
|
||||
|
||||
echo Update: %BIOSVER% -^> %TARGETVER%
|
||||
echo Applying BIOS update (this may take a few minutes, do not power off)...
|
||||
|
||||
REM --- Run Flash64W.exe from BIOS directory to avoid UNC path issues ---
|
||||
REM Exit codes: 0=success, 2=reboot needed, 3=already current, 6=reboot needed
|
||||
pushd "%BIOSDIR%"
|
||||
Flash64W.exe /b="%BIOSFILE%" /s /f /l=X:\bios-update.log
|
||||
set FLASHRC=%ERRORLEVEL%
|
||||
popd
|
||||
echo Flash complete (exit code %FLASHRC%).
|
||||
|
||||
if "%FLASHRC%"=="3" (
|
||||
echo BIOS is already up to date.
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
if "%FLASHRC%"=="0" (
|
||||
echo BIOS update complete.
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
if "%FLASHRC%"=="2" goto :staged
|
||||
if "%FLASHRC%"=="6" goto :staged
|
||||
|
||||
echo WARNING: Flash64W.exe returned unexpected code %FLASHRC%.
|
||||
echo Check X:\bios-update.log for details.
|
||||
exit /b 0
|
||||
|
||||
:staged
|
||||
echo.
|
||||
echo ========================================
|
||||
echo BIOS update staged successfully.
|
||||
echo It will flash during POST after the
|
||||
echo post-imaging reboot.
|
||||
echo ========================================
|
||||
echo.
|
||||
exit /b 0
|
||||
|
||||
REM ============================================================
|
||||
REM compare_versions - Compare two dotted version strings
|
||||
REM Usage: call :compare_versions "current" "target"
|
||||
REM Sets VERCMP=newer if current > target, older if current < target, equal if same
|
||||
REM ============================================================
|
||||
:compare_versions
|
||||
set "VERCMP=equal"
|
||||
set "_CV=%~1"
|
||||
set "_TV=%~2"
|
||||
|
||||
REM Parse current version parts
|
||||
for /f "tokens=1,2,3 delims=." %%a in ("%_CV%") do (
|
||||
set /a "C1=%%a" 2>NUL
|
||||
set /a "C2=%%b" 2>NUL
|
||||
set /a "C3=%%c" 2>NUL
|
||||
)
|
||||
REM Parse target version parts
|
||||
for /f "tokens=1,2,3 delims=." %%a in ("%_TV%") do (
|
||||
set /a "T1=%%a" 2>NUL
|
||||
set /a "T2=%%b" 2>NUL
|
||||
set /a "T3=%%c" 2>NUL
|
||||
)
|
||||
|
||||
if %C1% GTR %T1% ( set "VERCMP=newer" & goto :eof )
|
||||
if %C1% LSS %T1% ( set "VERCMP=older" & goto :eof )
|
||||
if %C2% GTR %T2% ( set "VERCMP=newer" & goto :eof )
|
||||
if %C2% LSS %T2% ( set "VERCMP=older" & goto :eof )
|
||||
if %C3% GTR %T3% ( set "VERCMP=newer" & goto :eof )
|
||||
if %C3% LSS %T3% ( set "VERCMP=older" & goto :eof )
|
||||
set "VERCMP=equal"
|
||||
goto :eof
|
||||
45
playbook/shopfloor-setup/CMM/01-Setup-CMM.ps1
Normal file
45
playbook/shopfloor-setup/CMM/01-Setup-CMM.ps1
Normal file
@@ -0,0 +1,45 @@
|
||||
# 01-Setup-CMM.ps1 — CMM-specific setup (runs after Shopfloor baseline)
|
||||
# Installs Hexagon CLM Tools, PC-DMIS 2016, and PC-DMIS 2019 R2
|
||||
|
||||
Write-Host "=== CMM Setup ==="
|
||||
|
||||
$hexDir = "C:\Enrollment\shopfloor-setup\CMM\hexagon"
|
||||
|
||||
if (-not (Test-Path $hexDir)) {
|
||||
Write-Warning "Hexagon folder not found at $hexDir — skipping CMM installs."
|
||||
exit 0
|
||||
}
|
||||
|
||||
# --- Find installers ---
|
||||
$clm = Get-ChildItem -Path $hexDir -Filter "CLM_*.exe" | Select-Object -First 1
|
||||
$pcdmis16 = Get-ChildItem -Path $hexDir -Filter "Pcdmis2016*x64.exe" | Select-Object -First 1
|
||||
$pcdmis19 = Get-ChildItem -Path $hexDir -Filter "Pcdmis2019*x64.exe" | Select-Object -First 1
|
||||
|
||||
# --- 1. Install CLM Tools (license manager — must be first) ---
|
||||
if ($clm) {
|
||||
Write-Host "Installing CLM Tools: $($clm.Name)..."
|
||||
$p = Start-Process -FilePath $clm.FullName -ArgumentList "-q -norestart" -Wait -PassThru
|
||||
Write-Host " CLM Tools exit code: $($p.ExitCode)"
|
||||
} else {
|
||||
Write-Warning "CLM Tools installer not found in $hexDir (expected CLM_*.exe)"
|
||||
}
|
||||
|
||||
# --- 2. Install PC-DMIS 2016 ---
|
||||
if ($pcdmis16) {
|
||||
Write-Host "Installing PC-DMIS 2016: $($pcdmis16.Name)..."
|
||||
$p = Start-Process -FilePath $pcdmis16.FullName -ArgumentList "-q INSTALLPDFCONVERTER=0 INSTALLOFFLINEHELP=0 HEIP=0 -norestart" -Wait -PassThru
|
||||
Write-Host " PC-DMIS 2016 exit code: $($p.ExitCode)"
|
||||
} else {
|
||||
Write-Warning "PC-DMIS 2016 installer not found in $hexDir (expected Pcdmis2016*x64.exe)"
|
||||
}
|
||||
|
||||
# --- 3. Install PC-DMIS 2019 R2 ---
|
||||
if ($pcdmis19) {
|
||||
Write-Host "Installing PC-DMIS 2019 R2: $($pcdmis19.Name)..."
|
||||
$p = Start-Process -FilePath $pcdmis19.FullName -ArgumentList "-q INSTALLPDFCONVERTER=0 INSTALLOFFLINEHELP=0 HEIP=0 -norestart" -Wait -PassThru
|
||||
Write-Host " PC-DMIS 2019 exit code: $($p.ExitCode)"
|
||||
} else {
|
||||
Write-Warning "PC-DMIS 2019 installer not found in $hexDir (expected Pcdmis2019*x64.exe)"
|
||||
}
|
||||
|
||||
Write-Host "=== CMM Setup Complete ==="
|
||||
13
playbook/shopfloor-setup/Check-Policies.bat
Normal file
13
playbook/shopfloor-setup/Check-Policies.bat
Normal file
@@ -0,0 +1,13 @@
|
||||
@echo off
|
||||
title MDM Policy Check
|
||||
powershell.exe -ExecutionPolicy Bypass -Command ^
|
||||
"$path = 'HKLM:\SOFTWARE\Microsoft\PolicyManager\current\device\ADMX_Power';" ^
|
||||
"Write-Host '';" ^
|
||||
"if (Test-Path $path) {" ^
|
||||
" Write-Host ' READY FOR LOCKDOWN ' -ForegroundColor White -BackgroundColor DarkGreen;" ^
|
||||
"} else {" ^
|
||||
" Write-Host ' NOT READY FOR LOCKDOWN ' -ForegroundColor White -BackgroundColor Red;" ^
|
||||
"};" ^
|
||||
"Write-Host '';" ^
|
||||
"Write-Host 'Press any key to exit...';" ^
|
||||
"$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')"
|
||||
45
playbook/shopfloor-setup/Display/01-Setup-Display.ps1
Normal file
45
playbook/shopfloor-setup/Display/01-Setup-Display.ps1
Normal file
@@ -0,0 +1,45 @@
|
||||
# 01-Setup-Display.ps1 — Display-specific setup (runs after Shopfloor baseline)
|
||||
# Reads display-type.txt to install either LobbyDisplay or Dashboard kiosk app.
|
||||
|
||||
$enrollDir = "C:\Enrollment"
|
||||
$typeFile = Join-Path $enrollDir "display-type.txt"
|
||||
$setupDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
|
||||
if (-not (Test-Path $typeFile)) {
|
||||
Write-Warning "No display-type.txt found - skipping display setup."
|
||||
return
|
||||
}
|
||||
|
||||
$displayType = (Get-Content $typeFile -First 1).Trim()
|
||||
Write-Host "=== Display Setup: $displayType ==="
|
||||
|
||||
switch ($displayType) {
|
||||
"Lobby" {
|
||||
$installer = Join-Path $setupDir "GEAerospaceLobbyDisplaySetup.exe"
|
||||
$appName = "Lobby Display"
|
||||
}
|
||||
"Dashboard" {
|
||||
$installer = Join-Path $setupDir "GEAerospaceDashboardSetup.exe"
|
||||
$appName = "Dashboard"
|
||||
}
|
||||
default {
|
||||
Write-Warning "Unknown display type: $displayType"
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if (-not (Test-Path $installer)) {
|
||||
Write-Warning "$appName installer not found at $installer - skipping."
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "Installing $appName..."
|
||||
$proc = Start-Process -FilePath $installer -ArgumentList '/VERYSILENT', '/SUPPRESSMSGBOXES', '/NORESTART', "/LOG=C:\Enrollment\$appName-install.log" -Wait -PassThru
|
||||
|
||||
if ($proc.ExitCode -eq 0) {
|
||||
Write-Host "$appName installed successfully."
|
||||
} else {
|
||||
Write-Warning "$appName exited with code $($proc.ExitCode). Check C:\Enrollment\$appName-install.log"
|
||||
}
|
||||
|
||||
Write-Host "=== Display Setup Complete ==="
|
||||
14
playbook/shopfloor-setup/Genspect/01-Setup-Genspect.ps1
Normal file
14
playbook/shopfloor-setup/Genspect/01-Setup-Genspect.ps1
Normal file
@@ -0,0 +1,14 @@
|
||||
# 01-Setup-Genspect.ps1 — Genspect-specific setup (runs after Shopfloor baseline)
|
||||
|
||||
Write-Host "=== Genspect Setup ==="
|
||||
|
||||
# --- Add Genspect credentials ---
|
||||
# cmdkey /generic:genspect-server /user:domain\genspectuser /pass:password
|
||||
|
||||
# --- Install Genspect applications ---
|
||||
# Start-Process msiexec.exe -ArgumentList '/i "C:\Enrollment\shopfloor-setup\Genspect\GenspectApp.msi" /qn' -Wait
|
||||
|
||||
# --- Genspect configuration ---
|
||||
# Set-ItemProperty -Path "HKLM:\SOFTWARE\CompanyName" -Name "PCType" -Value "Genspect"
|
||||
|
||||
Write-Host "=== Genspect Setup Complete ==="
|
||||
14
playbook/shopfloor-setup/Keyence/01-Setup-Keyence.ps1
Normal file
14
playbook/shopfloor-setup/Keyence/01-Setup-Keyence.ps1
Normal file
@@ -0,0 +1,14 @@
|
||||
# 01-Setup-Keyence.ps1 — Keyence-specific setup (runs after Shopfloor baseline)
|
||||
|
||||
Write-Host "=== Keyence Setup ==="
|
||||
|
||||
# --- Add Keyence credentials ---
|
||||
# cmdkey /generic:keyence-server /user:domain\keyenceuser /pass:password
|
||||
|
||||
# --- Install Keyence applications ---
|
||||
# Start-Process msiexec.exe -ArgumentList '/i "C:\Enrollment\shopfloor-setup\Keyence\KeyenceApp.msi" /qn' -Wait
|
||||
|
||||
# --- Keyence configuration ---
|
||||
# Set-ItemProperty -Path "HKLM:\SOFTWARE\CompanyName" -Name "PCType" -Value "Keyence"
|
||||
|
||||
Write-Host "=== Keyence Setup Complete ==="
|
||||
@@ -4,6 +4,19 @@
|
||||
# Cancel any pending reboot so it doesn't interrupt setup
|
||||
shutdown -a 2>$null
|
||||
|
||||
# Prompt user to unplug from PXE switch before re-enabling wired adapters
|
||||
Write-Host ""
|
||||
Write-Host "========================================" -ForegroundColor Yellow
|
||||
Write-Host " UNPLUG the ethernet cable from the" -ForegroundColor Yellow
|
||||
Write-Host " PXE imaging switch NOW." -ForegroundColor Yellow
|
||||
Write-Host "========================================" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host "Press any key to continue..." -ForegroundColor Yellow
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
|
||||
# Re-enable wired adapters
|
||||
Get-NetAdapter -Physical | Where-Object { $_.InterfaceDescription -notmatch 'Wi-Fi|Wireless' } | Enable-NetAdapter -Confirm:$false -ErrorAction SilentlyContinue
|
||||
|
||||
$enrollDir = "C:\Enrollment"
|
||||
$typeFile = Join-Path $enrollDir "pc-type.txt"
|
||||
$setupDir = Join-Path $enrollDir "shopfloor-setup"
|
||||
@@ -56,5 +69,17 @@ if ($pcType -ne "Shopfloor") {
|
||||
}
|
||||
|
||||
Write-Host "Shopfloor setup complete for $pcType."
|
||||
|
||||
# Copy backup lockdown script to SupportUser desktop
|
||||
$lockdownScript = Join-Path $setupDir "backup_lockdown.bat"
|
||||
if (Test-Path $lockdownScript) {
|
||||
Copy-Item -Path $lockdownScript -Destination "C:\Users\SupportUser\Desktop\backup_lockdown.bat" -Force
|
||||
Write-Host "backup_lockdown.bat copied to desktop."
|
||||
}
|
||||
|
||||
# Set auto-logon to expire after 2 more logins
|
||||
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /t REG_DWORD /d 2 /f | Out-Null
|
||||
Write-Host "Auto-logon set to 2 remaining logins."
|
||||
|
||||
Write-Host "Rebooting in 10 seconds..."
|
||||
shutdown /r /t 10
|
||||
|
||||
51
playbook/shopfloor-setup/Shopfloor/02-OpenTextCSF.ps1
Normal file
51
playbook/shopfloor-setup/Shopfloor/02-OpenTextCSF.ps1
Normal file
@@ -0,0 +1,51 @@
|
||||
# 02-OpenTextCSF.ps1 — Deploy OpenText HostExplorer CSF profiles (baseline)
|
||||
# Copies connection profiles, keymaps, menus, and macros to ProgramData.
|
||||
|
||||
$setupDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
$csfSource = Join-Path $setupDir "csf"
|
||||
$destRoot = "C:\ProgramData\Hummingbird\Connectivity\15.00\Shared"
|
||||
|
||||
if (-not (Test-Path $csfSource)) {
|
||||
Write-Warning "CSF source folder not found at $csfSource - skipping."
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "Deploying OpenText CSF profiles to $destRoot ..."
|
||||
|
||||
# Map of source subdirectories to destination subdirectories
|
||||
$folders = @(
|
||||
@{ Src = "Profile"; Dest = "Profile" }
|
||||
@{ Src = "Accessories\EB"; Dest = "Accessories\EB" }
|
||||
@{ Src = "HostExplorer\Keymap"; Dest = "HostExplorer\Keymap" }
|
||||
@{ Src = "HostExplorer\Menu"; Dest = "HostExplorer\Menu" }
|
||||
)
|
||||
|
||||
foreach ($folder in $folders) {
|
||||
$src = Join-Path $csfSource $folder.Src
|
||||
$dest = Join-Path $destRoot $folder.Dest
|
||||
|
||||
if (-not (Test-Path $src)) {
|
||||
Write-Host " Skipping $($folder.Src) (not present in csf source)"
|
||||
continue
|
||||
}
|
||||
|
||||
if (-not (Test-Path $dest)) {
|
||||
New-Item -Path $dest -ItemType Directory -Force | Out-Null
|
||||
Write-Host " Created $dest"
|
||||
}
|
||||
|
||||
$files = Get-ChildItem -Path $src -File
|
||||
foreach ($file in $files) {
|
||||
Copy-Item -Path $file.FullName -Destination $dest -Force
|
||||
Write-Host " Copied $($file.Name) -> $dest"
|
||||
}
|
||||
}
|
||||
|
||||
# Copy pre-made .lnk shortcuts to Public Desktop
|
||||
$lnkFiles = Get-ChildItem -Path $csfSource -Filter "*.lnk" -File
|
||||
foreach ($lnk in $lnkFiles) {
|
||||
Copy-Item -Path $lnk.FullName -Destination "C:\Users\Public\Desktop" -Force
|
||||
Write-Host " Copied $($lnk.Name) -> Public Desktop"
|
||||
}
|
||||
|
||||
Write-Host "OpenText CSF deployment complete."
|
||||
46
playbook/shopfloor-setup/Shopfloor/03-StartMenu.ps1
Normal file
46
playbook/shopfloor-setup/Shopfloor/03-StartMenu.ps1
Normal file
@@ -0,0 +1,46 @@
|
||||
# 03-StartMenu.ps1 — Create Start Menu shortcuts for all users (baseline)
|
||||
# Shortcuts in ProgramData\Microsoft\Windows\Start Menu\Programs\ persist for all accounts.
|
||||
|
||||
$startMenu = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs"
|
||||
$shell = New-Object -ComObject WScript.Shell
|
||||
|
||||
# --- Defect Tracker ---
|
||||
$lnk = $shell.CreateShortcut("$startMenu\Defect Tracker.lnk")
|
||||
$lnk.TargetPath = "S:\DT\Defect_Tracker\Defect_Tracker.application"
|
||||
$lnk.Save()
|
||||
Write-Host "Created Start Menu shortcut: Defect Tracker"
|
||||
|
||||
# --- Plant Applications (Edge) ---
|
||||
$lnk = $shell.CreateShortcut("$startMenu\Plant Applications.lnk")
|
||||
$lnk.TargetPath = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
|
||||
$lnk.Arguments = "https://mes-wjefferson.apps.lr.geaerospace.net/run/?app_name=Plant%20Applications"
|
||||
$lnk.Save()
|
||||
Write-Host "Created Start Menu shortcut: Plant Applications"
|
||||
|
||||
# --- ShopDB ---
|
||||
$lnk = $shell.CreateShortcut("$startMenu\ShopDB.lnk")
|
||||
$lnk.TargetPath = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
|
||||
$lnk.Arguments = "http://tsgwp00524.logon.ds.ge.com"
|
||||
$lnk.Save()
|
||||
Write-Host "Created Start Menu shortcut: ShopDB"
|
||||
|
||||
# --- Shopfloor Dashboard ---
|
||||
$lnk = $shell.CreateShortcut("$startMenu\Shopfloor Dashboard.lnk")
|
||||
$lnk.TargetPath = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
|
||||
$lnk.Arguments = "https://tsgwp00525.wjs.geaerospace.net/shopdb/shopfloor-dashboard/"
|
||||
$lnk.Save()
|
||||
Write-Host "Created Start Menu shortcut: Shopfloor Dashboard"
|
||||
|
||||
# --- ShopDB (GEA) ---
|
||||
$lnk = $shell.CreateShortcut("$startMenu\ShopDB (GEA).lnk")
|
||||
$lnk.TargetPath = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
|
||||
$lnk.Arguments = "https://tsgwp00525.wjs.geaerospace.net/shopdb/"
|
||||
$lnk.Save()
|
||||
Write-Host "Created Start Menu shortcut: ShopDB (GEA)"
|
||||
|
||||
# --- Add more shortcuts below ---
|
||||
# $lnk = $shell.CreateShortcut("$startMenu\AppName.lnk")
|
||||
# $lnk.TargetPath = "C:\Path\To\App.exe"
|
||||
# $lnk.Save()
|
||||
|
||||
Write-Host "Start Menu shortcuts complete."
|
||||
@@ -0,0 +1,9 @@
|
||||
# 04-NetworkAndWinRM.ps1 — Set network profiles to Private and enable WinRM (baseline)
|
||||
|
||||
# --- Set all network profiles to Private ---
|
||||
Get-NetConnectionProfile | Set-NetConnectionProfile -NetworkCategory Private
|
||||
Write-Host "All network profiles set to Private."
|
||||
|
||||
# --- Enable and configure WinRM ---
|
||||
Enable-PSRemoting -Force -SkipNetworkProfileCheck
|
||||
Write-Host "WinRM enabled."
|
||||
24
playbook/shopfloor-setup/Shopfloor/05-PowerAndDisplay.ps1
Normal file
24
playbook/shopfloor-setup/Shopfloor/05-PowerAndDisplay.ps1
Normal file
@@ -0,0 +1,24 @@
|
||||
# 05-PowerAndDisplay.ps1 — Shopfloor power plan and display settings (baseline)
|
||||
|
||||
# --- Set display timeout to Never (0 = never) on AC and DC ---
|
||||
powercfg /change monitor-timeout-ac 0
|
||||
powercfg /change monitor-timeout-dc 0
|
||||
powercfg /change standby-timeout-ac 0
|
||||
powercfg /change standby-timeout-dc 0
|
||||
Write-Host "Power: display and standby set to Never."
|
||||
|
||||
# --- Set High Performance power plan ---
|
||||
$highPerf = powercfg /list | Select-String "High performance"
|
||||
if ($highPerf -match "([a-f0-9-]{36})") {
|
||||
powercfg /setactive $Matches[1]
|
||||
Write-Host "Power plan set to High Performance."
|
||||
} else {
|
||||
Write-Host "High Performance plan not found, using current plan."
|
||||
}
|
||||
|
||||
# --- Disable lock screen timeout (screen saver) ---
|
||||
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name ScreenSaveActive -Value "0" -Force
|
||||
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name ScreenSaveTimeOut -Value "0" -Force
|
||||
Set-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name "SCRNSAVE.EXE" -Value "" -Force
|
||||
Write-Host "Screen saver set to None and disabled."
|
||||
|
||||
51
playbook/shopfloor-setup/Shopfloor/csf/Accessories/EB/Office.ebs
Executable file
51
playbook/shopfloor-setup/Shopfloor/csf/Accessories/EB/Office.ebs
Executable file
@@ -0,0 +1,51 @@
|
||||
'----------------------------------------------------------------------
|
||||
' This macro was created by the macro recorder.
|
||||
' Macro File: Office.ebs
|
||||
' Date: Wed May 18 09:55:44 2016
|
||||
' Recorded for profile: WJ_Office
|
||||
'----------------------------------------------------------------------
|
||||
|
||||
Sub Main
|
||||
Dim HostExplorer as Object
|
||||
Dim MyHost as Object
|
||||
Dim Rc as Integer
|
||||
|
||||
Dim iPSUpdateTimeout
|
||||
Dim iWaitForStringTimeout
|
||||
|
||||
On Error goto GenericErrorHandler
|
||||
|
||||
Set HostExplorer = CreateObject("HostExplorer") ' Initialize HostExplorer Object
|
||||
Set MyHost = HostExplorer.HostFromProfile("WJ_Office") ' Set object for the desired session
|
||||
If MyHost is Nothing Then Goto NoSession
|
||||
|
||||
iPSUpdateTimeout = 60 ' WaitPSUpdated timeout set to 60 seconds
|
||||
iWaitForStringTimeout = 60 ' WaitForString timeout set to 60 seconds
|
||||
|
||||
Rc = MyHost.WaitForString( "Username:", -1, iWaitForStringTimeout, TRUE )
|
||||
If Rc = 0 Then Goto OnWaitForStringTimeout
|
||||
Rc = MyHost.Keys("shop_pc^M")
|
||||
Rc = MyHost.WaitPSUpdated( iPSUpdateTimeout, TRUE )
|
||||
If Rc <> 0 Then Goto OnWaitPSUpdatedTimeout
|
||||
Rc = MyHost.WaitForString( "Do you have a barcode reader?", -1, iWaitForStringTimeout, TRUE )
|
||||
If Rc = 0 Then Goto OnWaitForStringTimeout
|
||||
Exit Sub
|
||||
|
||||
'-------------------- Runtime Error Handlers --------------------
|
||||
GenericErrorHandler:
|
||||
Msgbox "Error " & Err & " : """ & Error(Err) & """ has occurred on line " & Erl-1 & "." & Chr(10) & "Unable to continue macro execution.", 16, "HostExplorer Basic Macro Error"
|
||||
Exit Sub
|
||||
|
||||
NoSession:
|
||||
Msgbox "Profile ""WJ_Office"" is not running." & Chr(10) & "Unable to execute macro.", 16, "HostExplorer Macro Error"
|
||||
Exit Sub
|
||||
|
||||
OnWaitPSUpdatedTimeout:
|
||||
Msgbox "Timeout occured waiting for host to update screen." & Chr(10) & "Unable to continue macro execution.", 16, "HostExplorer Basic Macro Error"
|
||||
Exit Sub
|
||||
|
||||
OnWaitForStringTimeout:
|
||||
Msgbox "Timeout occured waiting for string on host screen." & Chr(10) & "Unable to continue macro execution.", 16, "HostExplorer Basic Macro Error"
|
||||
Exit Sub
|
||||
|
||||
End Sub
|
||||
35
playbook/shopfloor-setup/Shopfloor/csf/Accessories/EB/mmcs.ebs
Executable file
35
playbook/shopfloor-setup/Shopfloor/csf/Accessories/EB/mmcs.ebs
Executable file
@@ -0,0 +1,35 @@
|
||||
'----------------------------------------------------------------------
|
||||
' This macro was created by the macro recorder.
|
||||
' Macro File: mmcs.ebs
|
||||
' Date: Tue Jun 04 08:56:51 2013
|
||||
' Recorded for profile: mmcs
|
||||
'----------------------------------------------------------------------
|
||||
|
||||
Sub Main
|
||||
Dim HostExplorer as Object
|
||||
Dim MyHost as Object
|
||||
Dim iIdleTime
|
||||
|
||||
Dim iPSUpdateTime
|
||||
|
||||
On Error goto ErrorCheck
|
||||
|
||||
Set HostExplorer = CreateObject("HostExplorer") ' Initialize HostExplorer Object
|
||||
Set MyHost = HostExplorer.HostFromProfile("mmcs") ' Set object for the desired session
|
||||
|
||||
iPSUpdateTime = 60 ' PS Update wait time set to 60 seconds
|
||||
iIdleTime = 2000 ' Idle time set to 2000 milliseconds
|
||||
|
||||
MyHost.WaitPSUpdated(iPSUpdateTime)
|
||||
Rc = MyHost.WaitForString("Username:", -1, 9999, TRUE)
|
||||
MyHost.Keys("mmcswj^M")
|
||||
MyHost.WaitPSUpdated(iPSUpdateTime)
|
||||
Rc = MyHost.WaitForString("| Badge : |", -1, 9999, TRUE)
|
||||
Exit Sub
|
||||
|
||||
ErrorCheck:
|
||||
if (Err = 440) Then
|
||||
Msgbox "The specified session is not running.", 16, "Hummingbird Macro Error"
|
||||
End If
|
||||
Exit Sub
|
||||
End Sub
|
||||
56
playbook/shopfloor-setup/Shopfloor/csf/Accessories/EB/shopfloor.ebs
Executable file
56
playbook/shopfloor-setup/Shopfloor/csf/Accessories/EB/shopfloor.ebs
Executable file
@@ -0,0 +1,56 @@
|
||||
'----------------------------------------------------------------------
|
||||
' This macro was created by the macro recorder.
|
||||
' Macro File: shopfloor.ebs
|
||||
' Date: Wed May 18 09:57:00 2016
|
||||
' Recorded for profile: WJ Shopfloor
|
||||
'----------------------------------------------------------------------
|
||||
|
||||
Sub Main
|
||||
Dim HostExplorer as Object
|
||||
Dim MyHost as Object
|
||||
Dim Rc as Integer
|
||||
|
||||
Dim iPSUpdateTimeout
|
||||
Dim iWaitForStringTimeout
|
||||
|
||||
On Error goto GenericErrorHandler
|
||||
|
||||
Set HostExplorer = CreateObject("HostExplorer") ' Initialize HostExplorer Object
|
||||
Set MyHost = HostExplorer.HostFromProfile("WJ Shopfloor") ' Set object for the desired session
|
||||
If MyHost is Nothing Then Goto NoSession
|
||||
|
||||
iPSUpdateTimeout = 60 ' WaitPSUpdated timeout set to 60 seconds
|
||||
iWaitForStringTimeout = 60 ' WaitForString timeout set to 60 seconds
|
||||
|
||||
Rc = MyHost.WaitForString( "Username:", -1, iWaitForStringTimeout, TRUE )
|
||||
If Rc = 0 Then Goto OnWaitForStringTimeout
|
||||
Rc = MyHost.Keys("shop_xmi^M")
|
||||
Rc = MyHost.WaitPSUpdated( iPSUpdateTimeout, TRUE )
|
||||
If Rc <> 0 Then Goto OnWaitPSUpdatedTimeout
|
||||
Rc = MyHost.WaitForString( "Password:", -1, iWaitForStringTimeout, TRUE )
|
||||
If Rc = 0 Then Goto OnWaitForStringTimeout
|
||||
Rc = MyHost.Keys("dnc123^M")
|
||||
Rc = MyHost.WaitPSUpdated( iPSUpdateTimeout, TRUE )
|
||||
If Rc <> 0 Then Goto OnWaitPSUpdatedTimeout
|
||||
Rc = MyHost.WaitForString( "| EXIT | |", -1, iWaitForStringTimeout, TRUE )
|
||||
If Rc = 0 Then Goto OnWaitForStringTimeout
|
||||
Exit Sub
|
||||
|
||||
'-------------------- Runtime Error Handlers --------------------
|
||||
GenericErrorHandler:
|
||||
Msgbox "Error " & Err & " : """ & Error(Err) & """ has occurred on line " & Erl-1 & "." & Chr(10) & "Unable to continue macro execution.", 16, "HostExplorer Basic Macro Error"
|
||||
Exit Sub
|
||||
|
||||
NoSession:
|
||||
Msgbox "Profile ""WJ Shopfloor"" is not running." & Chr(10) & "Unable to execute macro.", 16, "HostExplorer Macro Error"
|
||||
Exit Sub
|
||||
|
||||
OnWaitPSUpdatedTimeout:
|
||||
Msgbox "Timeout occured waiting for host to update screen." & Chr(10) & "Unable to continue macro execution.", 16, "HostExplorer Basic Macro Error"
|
||||
Exit Sub
|
||||
|
||||
OnWaitForStringTimeout:
|
||||
Msgbox "Timeout occured waiting for string on host screen." & Chr(10) & "Unable to continue macro execution.", 16, "HostExplorer Basic Macro Error"
|
||||
Exit Sub
|
||||
|
||||
End Sub
|
||||
9
playbook/shopfloor-setup/Shopfloor/csf/HostExplorer/Keymap/Default.kmv
Executable file
9
playbook/shopfloor-setup/Shopfloor/csf/HostExplorer/Keymap/Default.kmv
Executable file
@@ -0,0 +1,9 @@
|
||||
[KEYMAP]
|
||||
Normal Entries=1
|
||||
Normal0=Backspace,Delete
|
||||
Shift Entries=0
|
||||
Ctrl Entries=0
|
||||
ShiftCtrl Entries=0
|
||||
Alt Entries=0
|
||||
ShiftAlt Entries=0
|
||||
AltCtrl Entries=0
|
||||
13
playbook/shopfloor-setup/Shopfloor/csf/HostExplorer/Keymap/Office.kmv
Executable file
13
playbook/shopfloor-setup/Shopfloor/csf/HostExplorer/Keymap/Office.kmv
Executable file
@@ -0,0 +1,13 @@
|
||||
[KEYMAP]
|
||||
Normal Entries=5
|
||||
Normal0=F4,Pf4
|
||||
Normal1=Subtract,Num-Pad-Minus
|
||||
Normal2=Multiply,Num-Pad-*
|
||||
Normal3=Divide,Num-Pad-/
|
||||
Normal4=Backspace,Delete
|
||||
Shift Entries=0
|
||||
Ctrl Entries=0
|
||||
ShiftCtrl Entries=0
|
||||
Alt Entries=0
|
||||
ShiftAlt Entries=0
|
||||
AltCtrl Entries=0
|
||||
23
playbook/shopfloor-setup/Shopfloor/csf/HostExplorer/Menu/Default Shop.hmv
Executable file
23
playbook/shopfloor-setup/Shopfloor/csf/HostExplorer/Menu/Default Shop.hmv
Executable file
@@ -0,0 +1,23 @@
|
||||
[Version]
|
||||
AssemblyVersion=1
|
||||
[Console]
|
||||
Title=HostExplorer Menu Editor
|
||||
IconPath=HumCSSPlugins.HumCSSActiveTunnelsPlugin
|
||||
IconID=IDI_CSS_CONSOLE
|
||||
[Attributes]
|
||||
SupportAssemblyEditing=1
|
||||
SupportSeparator=1
|
||||
ParentLevels=100
|
||||
[Parent Node]
|
||||
name=Menu
|
||||
[SubParent Node]
|
||||
name=Submenu
|
||||
[Child Node]
|
||||
name=Menu Option
|
||||
[Messages]
|
||||
Create New Parent=Create New Menu
|
||||
Create New SubParent=Create New Submenu
|
||||
Insert New Parent=Insert New Menu
|
||||
Insert New SubParent=Insert New Submenu
|
||||
[Root Group]
|
||||
Name=Menu
|
||||
474
playbook/shopfloor-setup/Shopfloor/csf/HostExplorer/Menu/Default VT.hmv
Executable file
474
playbook/shopfloor-setup/Shopfloor/csf/HostExplorer/Menu/Default VT.hmv
Executable file
@@ -0,0 +1,474 @@
|
||||
[version]
|
||||
AssemblyVersion=1
|
||||
|
||||
[nls]
|
||||
filename=menunls$LANGUAGE_EXTENSION$.hma
|
||||
|
||||
[Console]
|
||||
Title=HostExplorer Menu Editor
|
||||
IconPath=HumCSSPlugins.HumCSSActiveTunnelsPlugin
|
||||
IconID=IDI_CSS_CONSOLE
|
||||
|
||||
[Attributes]
|
||||
SupportAssemblyEditing=1
|
||||
SupportEnablingDisablingItems=0
|
||||
SupportSeparator=1
|
||||
|
||||
[Parent Node]
|
||||
Nameid=Parent
|
||||
|
||||
[SubParent Node]
|
||||
Nameid=SubParent
|
||||
|
||||
[Child Node]
|
||||
Nameid=Child
|
||||
|
||||
[Messages]
|
||||
Nameid1=Create New Parent
|
||||
Nameid2=Create New SubParent
|
||||
Nameid3=Insert New Parent
|
||||
Nameid4=Insert New SubParent
|
||||
|
||||
[root group]
|
||||
Name=Menu
|
||||
item1=File
|
||||
item2=Edit
|
||||
item3=Transfer
|
||||
item4=Fonts
|
||||
item5=options
|
||||
item6=tools
|
||||
item7=view
|
||||
item8=window
|
||||
item9=help
|
||||
|
||||
[Separator]
|
||||
name=
|
||||
id=0
|
||||
|
||||
[File]
|
||||
Nameid=File
|
||||
id=4071
|
||||
Parent=1
|
||||
item1=new session
|
||||
item2=duplicate session
|
||||
item3=open session
|
||||
item4=open session in same window
|
||||
item5=save session profile
|
||||
item6=close session
|
||||
item7=separator
|
||||
item8=open layout
|
||||
item9=save layout
|
||||
item10=separator
|
||||
item11=connect
|
||||
item12=disconnect
|
||||
item13=separator
|
||||
item14=print screen
|
||||
item15=print multiple screens
|
||||
item16=save screen
|
||||
item17=send screen
|
||||
item18=separator
|
||||
item19=screen capture
|
||||
item20=separator
|
||||
item21=Recent Sessions Submenu
|
||||
item22=separator
|
||||
item23=exit all
|
||||
|
||||
[New Session]
|
||||
nameid=New Session
|
||||
id=Dlg-New-Session
|
||||
|
||||
[Duplicate Session]
|
||||
nameid=Duplicate Session
|
||||
id=Duplicate-Session
|
||||
|
||||
[Open Session]
|
||||
nameid=Open Session
|
||||
id=Dlg-Open-Session
|
||||
|
||||
[Open Session In Same Window]
|
||||
nameid=Open Session In Same Window
|
||||
id=Dlg-Open-Session-In-Same-Window
|
||||
|
||||
[Save Session Profile]
|
||||
nameid=Save Session Profile
|
||||
id=Dlg-Save-Profile
|
||||
|
||||
[Close Session]
|
||||
nameid=Close Session
|
||||
id=Dlg-Close-Session
|
||||
|
||||
[open layout]
|
||||
nameid=Open Layout
|
||||
id=Dlg-Open-Layout
|
||||
|
||||
[save layout]
|
||||
nameid=Save Layout
|
||||
id=Dlg-Save-Layout
|
||||
|
||||
[connect]
|
||||
nameid=connect
|
||||
id=Connect
|
||||
|
||||
[disconnect]
|
||||
nameid=disconnect
|
||||
id=Disconnect
|
||||
|
||||
[print screen]
|
||||
nameid=print screen
|
||||
id=Dlg-Print-Screen
|
||||
|
||||
[print multiple screens]
|
||||
nameid=print multiple screens
|
||||
id=Dlg-Print-Multiple-Screens
|
||||
|
||||
|
||||
[save screen]
|
||||
nameid=Save Screen
|
||||
id=Dlg-Save-Screen
|
||||
|
||||
[send screen]
|
||||
nameid=Send Screen
|
||||
id=Send-Screen
|
||||
|
||||
[screen capture]
|
||||
nameid=Screen Capture
|
||||
id=Toggle-Capture
|
||||
|
||||
[Recent Sessions Submenu]
|
||||
nameid=Recent Sessions
|
||||
id=4187
|
||||
Parent=1
|
||||
item1=recent sessions
|
||||
|
||||
[recent sessions]
|
||||
nameid=Recent Sessions
|
||||
id=Recent-Sessions
|
||||
|
||||
[Exit all]
|
||||
nameid=exit all
|
||||
id=Dlg-Exit
|
||||
|
||||
|
||||
[Edit]
|
||||
Nameid=Edit
|
||||
id=4072
|
||||
Parent=1
|
||||
item1=copy
|
||||
item2=copy append
|
||||
item3=paste
|
||||
item4=separator
|
||||
item5=select all
|
||||
item6=separator
|
||||
item7=edit find
|
||||
item8=separator
|
||||
item9=clear display
|
||||
item10=clear all
|
||||
item11=soft terminal reset
|
||||
|
||||
[undo]
|
||||
nameid=undo
|
||||
id=Edit-Undo
|
||||
|
||||
[redo]
|
||||
nameid=redo
|
||||
id=Edit-Redo
|
||||
|
||||
[cut]
|
||||
nameid=cut
|
||||
id=Edit-Cut
|
||||
|
||||
[Copy]
|
||||
nameid=copy
|
||||
id=Edit-Copy
|
||||
|
||||
[Copy append]
|
||||
nameid=Copy Append
|
||||
id=Edit-Copy-Append
|
||||
|
||||
[Paste]
|
||||
nameid=Paste
|
||||
id=Edit-Paste
|
||||
|
||||
[Paste continue]
|
||||
nameid=Paste Continue
|
||||
id=Edit-Paste-Continue
|
||||
|
||||
[Select All]
|
||||
nameid=Select All
|
||||
id=Edit-SelectAll
|
||||
|
||||
[Edit Options]
|
||||
nameid=Options
|
||||
id=Dlg-Options
|
||||
|
||||
[edit find]
|
||||
nameid=Find
|
||||
id=Dlg-Find
|
||||
|
||||
[clear display]
|
||||
nameid=Clear Display
|
||||
id=Clear-Display
|
||||
|
||||
[clear all]
|
||||
nameid=Clear All
|
||||
id=Clear-Buffer
|
||||
|
||||
[soft terminal reset]
|
||||
nameid=Soft Terminal Reset
|
||||
id=Power-On-Reset
|
||||
|
||||
|
||||
[Transfer]
|
||||
Nameid=Transfer
|
||||
id=4073
|
||||
Parent=1
|
||||
item1=send
|
||||
item2=receive
|
||||
|
||||
[send]
|
||||
nameid=Send File to Host
|
||||
id=Dlg-Upload
|
||||
|
||||
[receive]
|
||||
nameid=Receive File from Host
|
||||
id=Dlg-Download
|
||||
|
||||
|
||||
[Fonts]
|
||||
Nameid=Fonts
|
||||
id=4074
|
||||
Parent=1
|
||||
item1=next larger
|
||||
item2=next smaller
|
||||
item3=choose font
|
||||
item4=maximize font
|
||||
|
||||
[next larger]
|
||||
nameid=next larger font
|
||||
id=Font-Larger
|
||||
|
||||
[next smaller]
|
||||
nameid=Next smaller font
|
||||
id=Font-Smaller
|
||||
|
||||
[choose font]
|
||||
nameid=font
|
||||
id=Dlg-Font-Select
|
||||
|
||||
[maximize font]
|
||||
nameid=Maximize font
|
||||
id=Maximize-Font
|
||||
|
||||
|
||||
[options]
|
||||
nameid=Options
|
||||
id=4075
|
||||
Parent=1
|
||||
item1=global options
|
||||
item2=api settings
|
||||
item3=separator
|
||||
item4=keyboard mapping
|
||||
item5=quick keys
|
||||
item6=separator
|
||||
item7=session properties
|
||||
|
||||
[global options]
|
||||
nameid=Global Options
|
||||
id=Dlg-Global
|
||||
|
||||
[api settings]
|
||||
nameid=API Settings
|
||||
id=Dlg-API-Settings
|
||||
|
||||
[keyboard mapping]
|
||||
nameid=Keyboard Mapping
|
||||
id=Dlg-Keyboard-Mapper
|
||||
|
||||
[quick keys]
|
||||
nameid=Quick Keys
|
||||
id=Dlg-Quick-Key-Editor
|
||||
|
||||
[session properties]
|
||||
nameid=session Properties
|
||||
id=Dlg-Edit-Session-Profile
|
||||
|
||||
|
||||
[tools]
|
||||
nameid=Tools
|
||||
id=4076
|
||||
Parent=1
|
||||
item1=Macro Submenu
|
||||
item2=Quick Script Submenu
|
||||
item3=separator
|
||||
item4=Customizetoolbar
|
||||
item5=Customizemenu
|
||||
item6=Customizesessionproperties
|
||||
|
||||
[Macro Submenu]
|
||||
nameid=Macro
|
||||
id=4177
|
||||
Parent=1
|
||||
item1=edit macro
|
||||
item2=run macro
|
||||
item3=separator
|
||||
item4=start recording
|
||||
item5=pause recording
|
||||
item6=resume recording
|
||||
item7=stop recording
|
||||
item8=cancel recording
|
||||
|
||||
[Edit macro]
|
||||
nameid=Macro Edit
|
||||
id=Dlg-Edit-Macro
|
||||
|
||||
[run macro]
|
||||
nameid=run
|
||||
id=Dlg-Run-Macro
|
||||
|
||||
[start recording]
|
||||
nameid=Start Recording
|
||||
id=Record-Macro
|
||||
|
||||
[pause recording]
|
||||
nameid=Pause Recording
|
||||
id=Toggle-Recording-Pause
|
||||
|
||||
[resume recording]
|
||||
nameid=Resume Recording
|
||||
id=Resume-Recording-Macro
|
||||
|
||||
[stop recording]
|
||||
nameid=Stop Recording
|
||||
id=End-Recording
|
||||
|
||||
[cancel recording]
|
||||
nameid=Cancel Recording
|
||||
id=Cancel-Macro-Recording
|
||||
|
||||
[Quick Script Submenu]
|
||||
nameid=Quick Script
|
||||
id=4091
|
||||
Parent=1
|
||||
item1=edit qs
|
||||
item2=run qs
|
||||
item3=stop qs
|
||||
item4=separator
|
||||
item5=start recording qs
|
||||
item6=pause recording qs
|
||||
item7=resume recording qs
|
||||
item8=stop recording qs
|
||||
item9=cancel recording qs
|
||||
|
||||
[Customizetoolbar]
|
||||
nameid=Customize Toolbar
|
||||
id=Dlg-Toolbars
|
||||
|
||||
[Customizemenu]
|
||||
nameid=Customize Menu
|
||||
id=Dlg-Customize-Menus
|
||||
|
||||
[CustomizeSessionProperties]
|
||||
nameid=Customize Session Properties
|
||||
id=Dlg-Customize-Session-Properties
|
||||
|
||||
[Edit qs]
|
||||
nameid=Edit
|
||||
id=Dlg-QuickScript-Editor
|
||||
|
||||
[run qs]
|
||||
nameid=Run
|
||||
id=Dlg-Run-QuickScript
|
||||
|
||||
[stop qs]
|
||||
nameid=Stop
|
||||
id=Stop-QuickScript
|
||||
|
||||
[start recording qs]
|
||||
nameid=Start Recording
|
||||
id=Record-QuickScript
|
||||
|
||||
[pause recording qs]
|
||||
nameid=Pause Recording
|
||||
id=Pause-Recording-QuickScript
|
||||
|
||||
[resume recording qs]
|
||||
nameid=Resume Recording
|
||||
id=Resume-Recording-QuickScript
|
||||
|
||||
[stop recording qs]
|
||||
nameid=Stop Recording
|
||||
id=Stop-Recording-QuickScript
|
||||
|
||||
[cancel recording qs]
|
||||
nameid=Cancel Recording
|
||||
id=Cancel-Recording-QuickScript
|
||||
|
||||
|
||||
[view]
|
||||
nameid=view
|
||||
id=4178
|
||||
Parent=1
|
||||
item1=hotspots
|
||||
item2=row and column indicator
|
||||
item3=cross hair cursor
|
||||
item4=full screen
|
||||
|
||||
[hotspots]
|
||||
nameid=Hotspots
|
||||
id=Toggle-View-Hotspots
|
||||
|
||||
[Row and Column Indicator]
|
||||
nameid=Row and Column Indicator
|
||||
id=Toggle-Row-And-Column-Indicator
|
||||
|
||||
[cross hair cursor]
|
||||
nameid=Cross-Hair Cursor
|
||||
id=Toggle-CrossHair-Cursor
|
||||
|
||||
[full screen]
|
||||
nameid=Full Screen
|
||||
id=Toggle-Full-Screen
|
||||
|
||||
|
||||
[window]
|
||||
nameid=Window
|
||||
id=4179
|
||||
Parent=1
|
||||
item1=cascade
|
||||
item2=next session
|
||||
item3=previous session
|
||||
item4=separator
|
||||
item5=session window list
|
||||
|
||||
[cascade]
|
||||
nameid=Cascade
|
||||
id=Cascade-Session-Windows
|
||||
|
||||
[next session]
|
||||
nameid=next session
|
||||
id=Next-Session
|
||||
|
||||
[previous session]
|
||||
nameid=previous session
|
||||
id=Prev-Session
|
||||
|
||||
[session window list]
|
||||
name=<List Of Windows>
|
||||
id=4142
|
||||
|
||||
|
||||
[help]
|
||||
nameid=Help
|
||||
id=4180
|
||||
Parent=1
|
||||
item1=contents
|
||||
item2=separator
|
||||
item3=about
|
||||
|
||||
[contents]
|
||||
nameid=Contents
|
||||
id=Help-Index
|
||||
|
||||
[about]
|
||||
nameid=about
|
||||
id=Help-About
|
||||
BIN
playbook/shopfloor-setup/Shopfloor/csf/IBM_qks.lnk
Executable file
BIN
playbook/shopfloor-setup/Shopfloor/csf/IBM_qks.lnk
Executable file
Binary file not shown.
106
playbook/shopfloor-setup/Shopfloor/csf/Profile/IBM_qks.hep
Executable file
106
playbook/shopfloor-setup/Shopfloor/csf/Profile/IBM_qks.hep
Executable file
@@ -0,0 +1,106 @@
|
||||
[PROFILE]
|
||||
Session Properties=Default 3270
|
||||
Menu=Default 3270
|
||||
Auto Run Macro Delay Time=1
|
||||
Gateway Name=ibmqks.ae.ge.com
|
||||
Session Keep Alive Interval=600
|
||||
PC Keyboard Type=5
|
||||
IND$FILE Parms=0,0,1,1,0,0,0,257,253,2048,200,430,430,0,1252,"IND$FILE","","","",0
|
||||
SSL/TLS Current User Certificate=1
|
||||
Window Title=%s - %p (%h)
|
||||
WinInfo Default Restored=0 0 0 0 70 405 822 595 0 0 0=20 10 0 0 400 0 0 0 0 3 2 2 0 HE_Bitmap| 0 0
|
||||
WinInfo Default Maximized=0 0 0 0 -8 -8 1936 1048 0 0 0=26 12 0 0 400 0 0 0 0 3 2 2 0 HE_Bitmap| 0 0
|
||||
Print Header2=Page: %# Document Name: %F
|
||||
QuickKey=Default
|
||||
Never Run Profile=Off
|
||||
Profile File Version=200
|
||||
Space Allocation Parms=0,0,0,0
|
||||
Kerberos Use Hummingbird Kerberos=On
|
||||
Cryptographic Mode=1
|
||||
IP Port=992
|
||||
Security Option=2
|
||||
SSL/TLS User Cipher Suites=DEFAULT
|
||||
[HEBar-59440]
|
||||
sizeFloatCX=505
|
||||
sizeFloatCY=28
|
||||
[Toolbars Layout-Summary]
|
||||
Bars=3
|
||||
ScreenCX=1920
|
||||
ScreenCY=1080
|
||||
[Session Options]
|
||||
Last Selected Page=139
|
||||
[Toolbars]
|
||||
ToolBarVersion=6
|
||||
bar0=Default 3270 ToolBar.tb3
|
||||
[Toolbars Layout-Bar0]
|
||||
BarID=59393
|
||||
[Toolbars Layout-Bar1]
|
||||
BarID=59419
|
||||
Bars=3
|
||||
Bar#0=0
|
||||
Bar#1=59440
|
||||
Bar#2=0
|
||||
[Toolbars Layout-Bar2]
|
||||
BarID=59440
|
||||
XPos=-2
|
||||
YPos=-2
|
||||
Docking=1
|
||||
MRUDockID=59419
|
||||
MRUDockLeftPos=-2
|
||||
MRUDockTopPos=-2
|
||||
MRUDockRightPos=512
|
||||
MRUDockBottomPos=26
|
||||
MRUFloatStyle=8196
|
||||
MRUFloatXPos=-1
|
||||
MRUFloatYPos=1025
|
||||
[Hotspots]
|
||||
ShowTips=1
|
||||
[ShortcutReplacers]
|
||||
Size=0
|
||||
[Site Info]
|
||||
EnableCache=Yes
|
||||
RefreshCacheOnConnect=0
|
||||
AlwaysUploadUsing=0
|
||||
AlwaysDownloadUsing=0
|
||||
ProfileVersion=5
|
||||
SecurityType=0
|
||||
Port=21
|
||||
SSL Implicit Port=990
|
||||
Directory2=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
SFTPProxyAddress=localhost
|
||||
SFTPProxyPort=0
|
||||
SFTPWriteSize=256
|
||||
GssApiServiceName=host
|
||||
GssApiProtLevel=P
|
||||
GssApiIssueCCC=No
|
||||
GssApiPBSZ=16000
|
||||
GssApiKerbClient=0
|
||||
GssApiUseHMS2MIT=No
|
||||
PassiveMode=2
|
||||
AllowServer2ServerTransfer=0
|
||||
KeepAlive=No
|
||||
AutoDetectServerType=Yes
|
||||
KeepAliveTime=0
|
||||
FirewallPort=21
|
||||
FirewallType=0
|
||||
NetworkTimeout=120
|
||||
ConvertGMTTime=0
|
||||
ResolveLinks=1
|
||||
RootToInitialDir=0
|
||||
ChangeDirChangesRoot=0
|
||||
DropVmsVersion=0
|
||||
LocalHourOffset=0
|
||||
LocalMinuteOffset=0
|
||||
TemporaryProfile=0
|
||||
SSLVersion=3
|
||||
SSLReuse=0
|
||||
SSLUserCertificateMode=0
|
||||
SSLCloseOnNegotiateionFail=0
|
||||
SSLAcceptServerSelfSignedCertificates=Yes
|
||||
SSLAcceptServerUnverifiedCertificates=Yes
|
||||
SSLDataChannelProtected=Yes
|
||||
SSLCryptographicMode=1
|
||||
AllowResume=No
|
||||
EPSV4=0
|
||||
[Stats]
|
||||
NumVisits=0
|
||||
122
playbook/shopfloor-setup/Shopfloor/csf/Profile/WJ Shopfloor.hep
Executable file
122
playbook/shopfloor-setup/Shopfloor/csf/Profile/WJ Shopfloor.hep
Executable file
@@ -0,0 +1,122 @@
|
||||
[PROFILE]
|
||||
Session Terminal Type=2
|
||||
Session Properties=Default VT
|
||||
Menu=Default VT
|
||||
Auto Run Macro Delay Time=1
|
||||
Gateway Name=wjfms3.apps.wlm.geaerospace.net
|
||||
Session Keep Alive Interval=600
|
||||
PC Keyboard Type=5
|
||||
Tabstops='8 16 24 32 40 48 56 64 72 '
|
||||
VT BG Colors='1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 8 7 7 9 15 14 10 2 10 '
|
||||
Default VT Recv Path=$MYDOCUMENTS$\
|
||||
SSL/TLS Version=3
|
||||
SSL/TLS Current User Certificate=1
|
||||
Window Title=%s - %p (%h)
|
||||
WinInfo Default Restored=0 0 0 0 176 21 892 619 0 0 0=-17 0 0 0 400 0 0 0 0 3 2 2 0 Courier New| 0 0
|
||||
WinInfo Default Maximized=0 0 0 0 -8 -8 1634 1066 0 0 0=30 15 0 0 700 0 0 0 1 3 2 2 0 HE_Bitmap| 0 0
|
||||
Print Header2=Page: %# Document Name: %F
|
||||
QuickKey=Super Key F6
|
||||
Never Run Profile=Off
|
||||
dwVTFlags1=29369344
|
||||
VT FG Colors='7 7 9 15 14 10 2 10 0 1 2 3 4 5 15 7 8 9 10 11 12 13 14 15 15 0 0 1 0 0 0 0 0 0 0 '
|
||||
Connect Timeout=60
|
||||
Disable Secure Connection Warning=Yes
|
||||
Profile File Version=200
|
||||
Cryptographic Mode=1
|
||||
Display RowCol Indicator=Off
|
||||
VT Scrollback Save Attribs=Off
|
||||
VT True Display Mode=1
|
||||
Status Line=1
|
||||
Kerberos Use Hummingbird Kerberos=On
|
||||
Keyboard=Office
|
||||
Auto Start Quick-Key=shopfloor.ebs
|
||||
On Disconnect=0
|
||||
Allow sleep while connected=0
|
||||
Toolbar Scheme Name=Default VT
|
||||
Save Profile on Window Close=Off
|
||||
Toolbar Scheme Modified=Default VT:30026745--1815298816
|
||||
Save Toolbar Info on Exit=Off
|
||||
Save Mode=0
|
||||
[Session Options]
|
||||
Last Selected Page=4000
|
||||
[HEBar-59440]
|
||||
[Toolbars Layout-Summary]
|
||||
Bars=3
|
||||
ScreenCX=1600
|
||||
ScreenCY=1200
|
||||
[Toolbars]
|
||||
ToolBarVersion=5
|
||||
bar0=Default VT ToolBar.tbv
|
||||
[Toolbars Layout-Bar0]
|
||||
BarID=59393
|
||||
Visible=0
|
||||
[Toolbars Layout-Bar1]
|
||||
BarID=59419
|
||||
Bars=3
|
||||
Bar#0=0
|
||||
Bar#1=59440
|
||||
Bar#2=0
|
||||
[Toolbars Layout-Bar2]
|
||||
BarID=59440
|
||||
XPos=-2
|
||||
YPos=-2
|
||||
Docking=1
|
||||
MRUDockID=59419
|
||||
MRUDockLeftPos=-2
|
||||
MRUDockTopPos=-2
|
||||
MRUDockRightPos=541
|
||||
MRUDockBottomPos=26
|
||||
MRUFloatStyle=8196
|
||||
MRUFloatXPos=-2147483648
|
||||
MRUFloatYPos=0
|
||||
[Hotspots]
|
||||
ShowTips=1
|
||||
[ShortcutReplacers]
|
||||
Size=0
|
||||
[Site Info]
|
||||
EnableCache=Yes
|
||||
RefreshCacheOnConnect=0
|
||||
AlwaysUploadUsing=0
|
||||
AlwaysDownloadUsing=0
|
||||
ProfileVersion=5
|
||||
SecurityType=0
|
||||
Port=21
|
||||
SSL Implicit Port=990
|
||||
Directory2=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
SFTPProxyAddress=localhost
|
||||
SFTPProxyPort=0
|
||||
SFTPWriteSize=256
|
||||
GssApiServiceName=host
|
||||
GssApiProtLevel=P
|
||||
GssApiIssueCCC=No
|
||||
GssApiPBSZ=16000
|
||||
GssApiKerbClient=0
|
||||
GssApiUseHMS2MIT=No
|
||||
PassiveMode=2
|
||||
AllowServer2ServerTransfer=0
|
||||
KeepAlive=No
|
||||
AutoDetectServerType=Yes
|
||||
KeepAliveTime=0
|
||||
FirewallPort=21
|
||||
FirewallType=0
|
||||
NetworkTimeout=120
|
||||
ConvertGMTTime=0
|
||||
ResolveLinks=1
|
||||
RootToInitialDir=0
|
||||
ChangeDirChangesRoot=0
|
||||
DropVmsVersion=0
|
||||
LocalHourOffset=0
|
||||
LocalMinuteOffset=0
|
||||
TemporaryProfile=0
|
||||
SSLVersion=3
|
||||
SSLReuse=0
|
||||
SSLUserCertificateMode=0
|
||||
SSLCloseOnNegotiateionFail=0
|
||||
SSLAcceptServerSelfSignedCertificates=Yes
|
||||
SSLAcceptServerUnverifiedCertificates=Yes
|
||||
SSLDataChannelProtected=Yes
|
||||
SSLCryptographicMode=1
|
||||
AllowResume=No
|
||||
EPSV4=0
|
||||
[Stats]
|
||||
NumVisits=0
|
||||
122
playbook/shopfloor-setup/Shopfloor/csf/Profile/WJ_Office.hep
Executable file
122
playbook/shopfloor-setup/Shopfloor/csf/Profile/WJ_Office.hep
Executable file
@@ -0,0 +1,122 @@
|
||||
[PROFILE]
|
||||
Session Terminal Type=2
|
||||
Session Properties=Default VT
|
||||
Menu=Default VT
|
||||
Auto Run Macro Delay Time=1
|
||||
Gateway Name=wjfms3.apps.wlm.geaerospace.net
|
||||
Session Keep Alive Interval=600
|
||||
PC Keyboard Type=5
|
||||
Tabstops='8 16 24 32 40 48 56 64 72 '
|
||||
VT BG Colors='1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 8 7 7 9 15 14 10 2 10 '
|
||||
Default VT Recv Path=$MYDOCUMENTS$\
|
||||
SSL/TLS Version=3
|
||||
SSL/TLS Current User Certificate=1
|
||||
Window Title=%s - %p (%h)
|
||||
WinInfo Default Restored=0 0 0 0 22 22 892 619 0 0 0=20 10 0 0 400 0 0 0 0 3 2 2 0 HE_Bitmap| 0 0
|
||||
WinInfo Default Maximized=0 0 0 0 -8 -8 1634 1066 0 0 0=30 15 0 0 700 0 0 0 1 3 2 2 0 HE_Bitmap| 0 0
|
||||
Print Header2=Page: %# Document Name: %F
|
||||
QuickKey=Super Key F6
|
||||
Never Run Profile=Off
|
||||
dwVTFlags1=29369344
|
||||
VT FG Colors='7 7 9 15 14 10 2 10 0 1 2 3 4 5 15 7 8 9 10 11 12 13 14 15 15 0 0 1 0 0 0 0 0 0 0 '
|
||||
Connect Timeout=60
|
||||
Disable Secure Connection Warning=Yes
|
||||
Profile File Version=200
|
||||
Cryptographic Mode=1
|
||||
Display RowCol Indicator=Off
|
||||
VT Scrollback Save Attribs=Off
|
||||
VT True Display Mode=1
|
||||
Status Line=1
|
||||
Kerberos Use Hummingbird Kerberos=On
|
||||
Keyboard=Office
|
||||
Auto Start Quick-Key=Office.ebs
|
||||
On Disconnect=0
|
||||
Allow sleep while connected=0
|
||||
Toolbar Scheme Name=Default VT
|
||||
Save Profile on Window Close=Off
|
||||
Toolbar Scheme Modified=Default VT:30026745--1815298816
|
||||
Save Toolbar Info on Exit=Off
|
||||
Save Mode=0
|
||||
[Session Options]
|
||||
Last Selected Page=4000
|
||||
[HEBar-59440]
|
||||
[Toolbars Layout-Summary]
|
||||
Bars=3
|
||||
ScreenCX=1600
|
||||
ScreenCY=1200
|
||||
[Toolbars]
|
||||
ToolBarVersion=5
|
||||
bar0=Default VT ToolBar.tbv
|
||||
[Toolbars Layout-Bar0]
|
||||
BarID=59393
|
||||
Visible=0
|
||||
[Toolbars Layout-Bar1]
|
||||
BarID=59419
|
||||
Bars=3
|
||||
Bar#0=0
|
||||
Bar#1=59440
|
||||
Bar#2=0
|
||||
[Toolbars Layout-Bar2]
|
||||
BarID=59440
|
||||
XPos=-2
|
||||
YPos=-2
|
||||
Docking=1
|
||||
MRUDockID=59419
|
||||
MRUDockLeftPos=-2
|
||||
MRUDockTopPos=-2
|
||||
MRUDockRightPos=541
|
||||
MRUDockBottomPos=26
|
||||
MRUFloatStyle=8196
|
||||
MRUFloatXPos=-2147483648
|
||||
MRUFloatYPos=0
|
||||
[Hotspots]
|
||||
ShowTips=1
|
||||
[ShortcutReplacers]
|
||||
Size=0
|
||||
[Site Info]
|
||||
EnableCache=Yes
|
||||
RefreshCacheOnConnect=0
|
||||
AlwaysUploadUsing=0
|
||||
AlwaysDownloadUsing=0
|
||||
ProfileVersion=5
|
||||
SecurityType=0
|
||||
Port=21
|
||||
SSL Implicit Port=990
|
||||
Directory2=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
SFTPProxyAddress=localhost
|
||||
SFTPProxyPort=0
|
||||
SFTPWriteSize=256
|
||||
GssApiServiceName=host
|
||||
GssApiProtLevel=P
|
||||
GssApiIssueCCC=No
|
||||
GssApiPBSZ=16000
|
||||
GssApiKerbClient=0
|
||||
GssApiUseHMS2MIT=No
|
||||
PassiveMode=2
|
||||
AllowServer2ServerTransfer=0
|
||||
KeepAlive=No
|
||||
AutoDetectServerType=Yes
|
||||
KeepAliveTime=0
|
||||
FirewallPort=21
|
||||
FirewallType=0
|
||||
NetworkTimeout=120
|
||||
ConvertGMTTime=0
|
||||
ResolveLinks=1
|
||||
RootToInitialDir=0
|
||||
ChangeDirChangesRoot=0
|
||||
DropVmsVersion=0
|
||||
LocalHourOffset=0
|
||||
LocalMinuteOffset=0
|
||||
TemporaryProfile=0
|
||||
SSLVersion=3
|
||||
SSLReuse=0
|
||||
SSLUserCertificateMode=0
|
||||
SSLCloseOnNegotiateionFail=0
|
||||
SSLAcceptServerSelfSignedCertificates=Yes
|
||||
SSLAcceptServerUnverifiedCertificates=Yes
|
||||
SSLDataChannelProtected=Yes
|
||||
SSLCryptographicMode=1
|
||||
AllowResume=No
|
||||
EPSV4=0
|
||||
[Stats]
|
||||
NumVisits=0
|
||||
128
playbook/shopfloor-setup/Shopfloor/csf/Profile/mmcs.hep
Executable file
128
playbook/shopfloor-setup/Shopfloor/csf/Profile/mmcs.hep
Executable file
@@ -0,0 +1,128 @@
|
||||
[PROFILE]
|
||||
Session Terminal Type=2
|
||||
Never Run Profile=Off
|
||||
Session Properties=Default VT
|
||||
Menu=Default VT
|
||||
Auto Run Macro Delay Time=1
|
||||
Gateway Name=wjfms3.apps.wlm.geaerospace.net
|
||||
Session Keep Alive Interval=600
|
||||
dwVTFlags1=29369344
|
||||
PC Keyboard Type=5
|
||||
Keyboard=ATM-VT420
|
||||
Tabstops='8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168 176 184 192 200 208 216 224 232 240 248 256 264 272 280 288 296 '
|
||||
Default VT Recv Path=$MYDOCUMENTS$\
|
||||
SSL/TLS Version=3
|
||||
SSL/TLS Current User Certificate=1
|
||||
Window Title=%s - %p (%h)
|
||||
WinInfo Default Restored=0 0 0 0 10 10 757 491 0 0 0=16 9 0 0 400 0 0 0 0 3 2 2 0 HE_Bitmap| 0 0
|
||||
WinInfo Default Maximized=0 0 0 0 -8 -8 1382 744 0 0 0=26 13 0 0 400 0 0 0 0 3 2 2 0 HE_Bitmap| 0 0
|
||||
Window State=2
|
||||
Use Specific PRTSCR Printer=On
|
||||
PrtScr DevMode=1025,1024,156,1497,33565,1,256,2794,1240,0,1,4,300,1,1,300,1,0,0,1,0,0,0,0,ZDesigner TLP 3842,User defined
|
||||
PrtScr Driver=winspool
|
||||
PrtScr Device=ZDesigner TLP 3842
|
||||
PrtScr Output=LPT1:
|
||||
Print Header2=Page: %# Document Name: %F
|
||||
Use Specific VT Printer=On
|
||||
VT DevMode=1025,1024,156,1497,323347,1,256,190,914,0,1,4,300,1,1,300,1,0,0,1,0,0,0,0,ZDesigner TLP 3842,User defined
|
||||
VT Driver=winspool
|
||||
VT Device=ZDesigner TLP 3842
|
||||
VT Output=USB001
|
||||
Printer Target=1
|
||||
VT Printer Bypass Windows Print Driver=Off
|
||||
VT Printer Use Default Font=On
|
||||
VT Printer Margins Left=320
|
||||
VT Printer Margins Right=0
|
||||
VT Printer Margins Bottom=0
|
||||
VT Printer Margins Top=0
|
||||
QuickKey=ID
|
||||
Auto Start Quick-Key=mmcs.ebs
|
||||
VT Auto Wrap=On
|
||||
Profile File Version=200
|
||||
Kerberos Use Hummingbird Kerberos=On
|
||||
Cryptographic Mode=1
|
||||
Save Mode=0
|
||||
[HEBar-59440]
|
||||
sizeFloatCX=534
|
||||
sizeFloatCY=28
|
||||
[Toolbars Layout-Summary]
|
||||
Bars=3
|
||||
ScreenCX=1366
|
||||
ScreenCY=768
|
||||
[Session Options]
|
||||
Last Selected Page=4000
|
||||
[Toolbars]
|
||||
ToolBarVersion=5
|
||||
bar0=Default VT ToolBar.tbv
|
||||
[Toolbars Layout-Bar0]
|
||||
BarID=59393
|
||||
[Toolbars Layout-Bar1]
|
||||
BarID=59419
|
||||
Bars=3
|
||||
Bar#0=0
|
||||
Bar#1=59440
|
||||
Bar#2=0
|
||||
[Toolbars Layout-Bar2]
|
||||
BarID=59440
|
||||
XPos=-2
|
||||
YPos=-2
|
||||
Docking=1
|
||||
MRUDockID=59419
|
||||
MRUDockLeftPos=-2
|
||||
MRUDockTopPos=-2
|
||||
MRUDockRightPos=541
|
||||
MRUDockBottomPos=26
|
||||
MRUFloatStyle=8196
|
||||
MRUFloatXPos=-1
|
||||
MRUFloatYPos=0
|
||||
[Hotspots]
|
||||
ShowTips=1
|
||||
[ShortcutReplacers]
|
||||
Size=0
|
||||
[Site Info]
|
||||
EnableCache=Yes
|
||||
RefreshCacheOnConnect=0
|
||||
AlwaysUploadUsing=0
|
||||
AlwaysDownloadUsing=0
|
||||
ProfileVersion=5
|
||||
SecurityType=0
|
||||
Port=21
|
||||
SSL Implicit Port=990
|
||||
Directory2=000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
SFTPProxyAddress=localhost
|
||||
SFTPProxyPort=0
|
||||
SFTPWriteSize=256
|
||||
GssApiServiceName=host
|
||||
GssApiProtLevel=P
|
||||
GssApiIssueCCC=No
|
||||
GssApiPBSZ=16000
|
||||
GssApiKerbClient=0
|
||||
GssApiUseHMS2MIT=No
|
||||
PassiveMode=2
|
||||
AllowServer2ServerTransfer=0
|
||||
KeepAlive=No
|
||||
AutoDetectServerType=Yes
|
||||
KeepAliveTime=0
|
||||
FirewallPort=21
|
||||
FirewallType=0
|
||||
NetworkTimeout=120
|
||||
ConvertGMTTime=0
|
||||
ResolveLinks=1
|
||||
RootToInitialDir=0
|
||||
ChangeDirChangesRoot=0
|
||||
DropVmsVersion=0
|
||||
LocalHourOffset=0
|
||||
LocalMinuteOffset=0
|
||||
TemporaryProfile=0
|
||||
SSLVersion=1
|
||||
SSLReuse=0
|
||||
SSLUserCertificateMode=0
|
||||
SSLCloseOnNegotiateionFail=0
|
||||
SSLAcceptServerSelfSignedCertificates=Yes
|
||||
SSLAcceptServerUnverifiedCertificates=Yes
|
||||
SSLDataChannelProtected=Yes
|
||||
SSLCryptographicMode=1
|
||||
AllowResume=No
|
||||
EPSV4=0
|
||||
[Stats]
|
||||
NumVisits=0
|
||||
BIN
playbook/shopfloor-setup/Shopfloor/csf/WJ Shopfloor.lnk
Executable file
BIN
playbook/shopfloor-setup/Shopfloor/csf/WJ Shopfloor.lnk
Executable file
Binary file not shown.
BIN
playbook/shopfloor-setup/Shopfloor/csf/WJ_Office.lnk
Executable file
BIN
playbook/shopfloor-setup/Shopfloor/csf/WJ_Office.lnk
Executable file
Binary file not shown.
BIN
playbook/shopfloor-setup/Shopfloor/csf/mmcs.lnk
Executable file
BIN
playbook/shopfloor-setup/Shopfloor/csf/mmcs.lnk
Executable file
Binary file not shown.
84
playbook/shopfloor-setup/Standard/01-eDNC.ps1
Normal file
84
playbook/shopfloor-setup/Standard/01-eDNC.ps1
Normal file
@@ -0,0 +1,84 @@
|
||||
# 01-eDNC.ps1 — Install eDNC and MarkZebra, deploy custom eMxInfo.txt (Standard)
|
||||
|
||||
Write-Host "=== eDNC / MarkZebra Setup ==="
|
||||
|
||||
$edncDir = "C:\Enrollment\shopfloor-setup\Standard\eDNC"
|
||||
|
||||
if (-not (Test-Path $edncDir)) {
|
||||
Write-Warning "eDNC folder not found at $edncDir — skipping."
|
||||
exit 0
|
||||
}
|
||||
|
||||
# --- Find installers ---
|
||||
$edncMsi = Get-ChildItem -Path $edncDir -Filter "eDNC-*.msi" | Select-Object -First 1
|
||||
$markMsi = Get-ChildItem -Path $edncDir -Filter "MarkZebra.msi" | Select-Object -First 1
|
||||
$emxInfo = Join-Path $edncDir "eMxInfo.txt"
|
||||
|
||||
# --- 1. Install eDNC ---
|
||||
if ($edncMsi) {
|
||||
Write-Host "Installing eDNC: $($edncMsi.Name)..."
|
||||
$p = Start-Process -FilePath "msiexec.exe" -ArgumentList "/i `"$($edncMsi.FullName)`" /qn /norestart LAUNCHNTLARS=false" -Wait -PassThru
|
||||
Write-Host " eDNC exit code: $($p.ExitCode)"
|
||||
} else {
|
||||
Write-Warning "eDNC installer not found in $edncDir (expected eDNC-*.msi)"
|
||||
}
|
||||
|
||||
# --- 2. Install MarkZebra ---
|
||||
if ($markMsi) {
|
||||
Write-Host "Installing MarkZebra: $($markMsi.Name)..."
|
||||
$p = Start-Process -FilePath "msiexec.exe" -ArgumentList "/i `"$($markMsi.FullName)`" /qn /norestart LAUNCHNTLARS=false" -Wait -PassThru
|
||||
Write-Host " MarkZebra exit code: $($p.ExitCode)"
|
||||
} else {
|
||||
Write-Warning "MarkZebra installer not found in $edncDir (expected MarkZebra.msi)"
|
||||
}
|
||||
|
||||
# --- 3. Mirror x86 installs to 64-bit Program Files (app uses hardcoded paths) ---
|
||||
# MarkZebra.exe references \Mark\, mxTransactionDll.dll references \Dnc\Server Files\
|
||||
$copies = @(
|
||||
@{ Src = "C:\Program Files (x86)\Mark"; Dst = "C:\Program Files\Mark" },
|
||||
@{ Src = "C:\Program Files (x86)\Dnc"; Dst = "C:\Program Files\Dnc" }
|
||||
)
|
||||
foreach ($c in $copies) {
|
||||
if (Test-Path $c.Src) {
|
||||
if (-not (Test-Path $c.Dst)) {
|
||||
New-Item -Path $c.Dst -ItemType Directory -Force | Out-Null
|
||||
}
|
||||
Copy-Item -Path "$($c.Src)\*" -Destination $c.Dst -Recurse -Force
|
||||
Write-Host " Copied $($c.Src) -> $($c.Dst)"
|
||||
}
|
||||
}
|
||||
|
||||
# --- 4. Set DNC site and MarkZebra config ---
|
||||
$regBase = "HKLM\SOFTWARE\WOW6432Node\GE Aircraft Engines\DNC"
|
||||
reg add "$regBase\General" /v Site /t REG_SZ /d WestJefferson /f | Out-Null
|
||||
Write-Host " DNC site set to WestJefferson."
|
||||
|
||||
reg add "$regBase\Mark" /v "Port Id" /t REG_SZ /d COM1 /f | Out-Null
|
||||
reg add "$regBase\Mark" /v "Baud" /t REG_SZ /d 9600 /f | Out-Null
|
||||
reg add "$regBase\Mark" /v "Parity" /t REG_SZ /d None /f | Out-Null
|
||||
reg add "$regBase\Mark" /v "Data Bits" /t REG_SZ /d 8 /f | Out-Null
|
||||
reg add "$regBase\Mark" /v "Stop Bits" /t REG_SZ /d 1 /f | Out-Null
|
||||
reg add "$regBase\Mark" /v "Message Type" /t REG_SZ /d V /f | Out-Null
|
||||
reg add "$regBase\Mark" /v "Debug" /t REG_SZ /d ON /f | Out-Null
|
||||
reg add "$regBase\Mark" /v "MarkerType" /t REG_SZ /d Mark2D /f | Out-Null
|
||||
reg add "$regBase\Mark" /v "DncPatterns" /t REG_SZ /d NO /f | Out-Null
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\WOW6432Node\GE Aircraft Engines\DNC\Mark" -Name "CageCode" -Value "" -Force
|
||||
Write-Host " MarkZebra registry configured."
|
||||
|
||||
# --- 5. Deploy custom eMxInfo.txt to both Program Files paths ---
|
||||
if (Test-Path $emxInfo) {
|
||||
$dest86 = "C:\Program Files (x86)\DNC\Server Files"
|
||||
$dest64 = "C:\Program Files\DNC\Server Files"
|
||||
|
||||
foreach ($dest in @($dest86, $dest64)) {
|
||||
if (-not (Test-Path $dest)) {
|
||||
New-Item -Path $dest -ItemType Directory -Force | Out-Null
|
||||
}
|
||||
Copy-Item -Path $emxInfo -Destination (Join-Path $dest "eMxInfo.txt") -Force
|
||||
Write-Host " eMxInfo.txt -> $dest"
|
||||
}
|
||||
} else {
|
||||
Write-Warning "eMxInfo.txt not found at $emxInfo"
|
||||
}
|
||||
|
||||
Write-Host "=== eDNC / MarkZebra Setup Complete ==="
|
||||
@@ -0,0 +1,14 @@
|
||||
# 01-Setup-WaxAndTrace.ps1 — Wax and Trace-specific setup (runs after Shopfloor baseline)
|
||||
|
||||
Write-Host "=== Wax and Trace Setup ==="
|
||||
|
||||
# --- Add Wax and Trace credentials ---
|
||||
# cmdkey /generic:wax-server /user:domain\waxuser /pass:password
|
||||
|
||||
# --- Install Wax and Trace applications ---
|
||||
# Start-Process msiexec.exe -ArgumentList '/i "C:\Enrollment\shopfloor-setup\WaxAndTrace\WaxApp.msi" /qn' -Wait
|
||||
|
||||
# --- Wax and Trace configuration ---
|
||||
# Set-ItemProperty -Path "HKLM:\SOFTWARE\CompanyName" -Name "PCType" -Value "WaxAndTrace"
|
||||
|
||||
Write-Host "=== Wax and Trace Setup Complete ==="
|
||||
54
playbook/shopfloor-setup/backup_lockdown.bat
Normal file
54
playbook/shopfloor-setup/backup_lockdown.bat
Normal file
@@ -0,0 +1,54 @@
|
||||
@echo off
|
||||
title Shopfloor Backup Lockdown
|
||||
|
||||
:: Self-elevate to administrator
|
||||
net session >nul 2>&1
|
||||
if %errorlevel% neq 0 (
|
||||
echo Requesting administrator privileges...
|
||||
powershell -Command "Start-Process '%~f0' -Verb RunAs"
|
||||
exit /b
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Shopfloor Backup Lockdown
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
:: Run SFLD autologon script first
|
||||
echo Running SFLD autologon script...
|
||||
"C:\Program Files\PowerShell\7\pwsh.exe" -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Sysinternals\sfld_autologon.ps1"
|
||||
|
||||
echo.
|
||||
echo Waiting 10 seconds...
|
||||
ping -n 11 127.0.0.1 >nul
|
||||
|
||||
:: Discover the EnterpriseMgmt enrollment GUID
|
||||
for /f "delims=" %%G in ('powershell -NoProfile -Command "$t = Get-ScheduledTask | Where-Object { $_.TaskPath -match '\\Microsoft\\EnterpriseMgmt\\' -and $_.TaskName -match 'Schedule #1' }; if ($t) { $t.TaskPath -replace '.*EnterpriseMgmt\\([^\\]+)\\.*','$1' | Select-Object -First 1 } else { '' }"') do set GUID=%%G
|
||||
|
||||
if not defined GUID (
|
||||
echo ERROR: No EnterpriseMgmt enrollment GUID found.
|
||||
echo The device may not be enrolled in MDM yet.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo Enrollment GUID: %GUID%
|
||||
echo.
|
||||
|
||||
echo Running EnterpriseMgmt Schedule #1...
|
||||
schtasks /run /tn "\Microsoft\EnterpriseMgmt\%GUID%\Schedule #1 created by enrollment client"
|
||||
echo Waiting 30 seconds...
|
||||
ping -n 31 127.0.0.1 >nul
|
||||
|
||||
echo Running EnterpriseMgmt Schedule #2...
|
||||
schtasks /run /tn "\Microsoft\EnterpriseMgmt\%GUID%\Schedule #2 created by enrollment client"
|
||||
echo Waiting 90 seconds...
|
||||
ping -n 91 127.0.0.1 >nul
|
||||
|
||||
echo Running EnterpriseMgmt Schedule #3...
|
||||
schtasks /run /tn "\Microsoft\EnterpriseMgmt\%GUID%\Schedule #3 created by enrollment client"
|
||||
|
||||
echo.
|
||||
echo Lockdown complete.
|
||||
pause
|
||||
@@ -86,7 +86,7 @@ echo 2. Wax and Trace
|
||||
echo 3. Keyence
|
||||
echo 4. Genspect
|
||||
echo 5. Display
|
||||
echo 6. Shopfloor (General)
|
||||
echo 6. Standard
|
||||
echo.
|
||||
set PCTYPE=
|
||||
set /p pctype_choice=Enter your choice (1-6):
|
||||
@@ -95,7 +95,7 @@ if "%pctype_choice%"=="2" set PCTYPE=WaxAndTrace
|
||||
if "%pctype_choice%"=="3" set PCTYPE=Keyence
|
||||
if "%pctype_choice%"=="4" set PCTYPE=Genspect
|
||||
if "%pctype_choice%"=="5" set PCTYPE=Display
|
||||
if "%pctype_choice%"=="6" set PCTYPE=Shopfloor
|
||||
if "%pctype_choice%"=="6" set PCTYPE=Standard
|
||||
if "%PCTYPE%"=="" goto pctype_menu
|
||||
|
||||
REM --- Display sub-type selection ---
|
||||
@@ -245,13 +245,13 @@ if not "%DISPLAYTYPE%"=="" echo %DISPLAYTYPE%> W:\Enrollment\display-type.txt
|
||||
copy /Y "Y:\shopfloor-setup\Run-ShopfloorSetup.ps1" "W:\Enrollment\Run-ShopfloorSetup.ps1"
|
||||
REM --- Always copy Shopfloor baseline scripts ---
|
||||
mkdir W:\Enrollment\shopfloor-setup 2>NUL
|
||||
copy /Y "Y:\shopfloor-setup\backup_lockdown.bat" "W:\Enrollment\shopfloor-setup\backup_lockdown.bat"
|
||||
if exist "Y:\shopfloor-setup\Shopfloor" (
|
||||
mkdir W:\Enrollment\shopfloor-setup\Shopfloor 2>NUL
|
||||
xcopy /E /Y /I "Y:\shopfloor-setup\Shopfloor" "W:\Enrollment\shopfloor-setup\Shopfloor\"
|
||||
echo Copied Shopfloor baseline setup files.
|
||||
)
|
||||
REM --- Copy type-specific scripts on top of baseline ---
|
||||
if "%PCTYPE%"=="Shopfloor" goto pctype_done
|
||||
if exist "Y:\shopfloor-setup\%PCTYPE%" (
|
||||
mkdir "W:\Enrollment\shopfloor-setup\%PCTYPE%" 2>NUL
|
||||
xcopy /E /Y /I "Y:\shopfloor-setup\%PCTYPE%" "W:\Enrollment\shopfloor-setup\%PCTYPE%\"
|
||||
|
||||
Reference in New Issue
Block a user