Initial commit: Organized PowerShell scripts for ShopDB asset collection
Structure: - asset-collection/: Local PC data collection scripts - remote-execution/: WinRM remote execution scripts - setup-utilities/: Configuration and testing utilities - registry-backup/: GE registry backup scripts - winrm-https/: WinRM HTTPS certificate setup - docs/: Complete documentation Each folder includes a README with detailed documentation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
426
PRODUCTION_URL_UPDATE.md
Normal file
426
PRODUCTION_URL_UPDATE.md
Normal file
@@ -0,0 +1,426 @@
|
||||
# PowerShell Scripts - Production URL Configuration
|
||||
|
||||
**Date:** 2025-11-21
|
||||
**Status:** ✅ Updated for Production
|
||||
**Target Server:** https://tsgwp00525.rd.ds.ge.com/shopdb/api.asp
|
||||
|
||||
---
|
||||
|
||||
## Changes Made
|
||||
|
||||
### Files Updated
|
||||
|
||||
1. **Update-PC-CompleteAsset-Silent.bat**
|
||||
- Dashboard URL: https://tsgwp00525.rd.ds.ge.com/shopdb/api.asp
|
||||
|
||||
2. **Update-PC-CompleteAsset.ps1**
|
||||
- Default parameter: https://tsgwp00525.rd.ds.ge.com/shopdb/api.asp
|
||||
- Auto-discovery list (first priority)
|
||||
- Fallback default URL
|
||||
|
||||
---
|
||||
|
||||
## Deployment Instructions
|
||||
|
||||
### Step 1: Copy Files to Client PCs
|
||||
|
||||
**Source Location (Linux Dev):**
|
||||
```
|
||||
/home/camp/projects/powershell/
|
||||
```
|
||||
|
||||
**Target Location (Windows PCs):**
|
||||
```
|
||||
C:\Apps\PowerShell\
|
||||
```
|
||||
|
||||
**Files to Deploy:**
|
||||
```
|
||||
Update-PC-CompleteAsset.ps1
|
||||
Update-PC-CompleteAsset-Silent.bat
|
||||
Get-ShopfloorConfig.ps1
|
||||
Backup-GERegistry.ps1
|
||||
applications.csv
|
||||
```
|
||||
|
||||
### Step 2: Deployment Methods
|
||||
|
||||
#### Option A: Group Policy (Recommended)
|
||||
|
||||
**GPO Startup Script:**
|
||||
```batch
|
||||
@echo off
|
||||
REM Copy PowerShell scripts from network share to local PC
|
||||
xcopy /Y /E "\\fileserver\shares\IT\PowerShell\*.*" "C:\Apps\PowerShell\"
|
||||
```
|
||||
|
||||
**GPO Path:**
|
||||
```
|
||||
Computer Configuration
|
||||
→ Policies
|
||||
→ Windows Settings
|
||||
→ Scripts (Startup/Shutdown)
|
||||
→ Startup
|
||||
→ Add: deploy-powershell-scripts.bat
|
||||
```
|
||||
|
||||
#### Option B: Manual Copy via Network Share
|
||||
|
||||
```batch
|
||||
REM On each PC (or via remote execution)
|
||||
xcopy /Y /E "\\tsgwp00525\IT\PowerShell\*.*" "C:\Apps\PowerShell\"
|
||||
```
|
||||
|
||||
#### Option C: PowerShell Remoting (Bulk Deployment)
|
||||
|
||||
```powershell
|
||||
# Run from admin workstation
|
||||
$PCs = Get-Content "C:\PCList.txt"
|
||||
|
||||
foreach ($PC in $PCs) {
|
||||
Write-Host "Deploying to $PC..."
|
||||
|
||||
# Create directory if doesn't exist
|
||||
Invoke-Command -ComputerName $PC -ScriptBlock {
|
||||
New-Item -Path "C:\Apps\PowerShell" -ItemType Directory -Force
|
||||
}
|
||||
|
||||
# Copy files
|
||||
Copy-Item -Path "\\source\PowerShell\*" -Destination "\\$PC\C$\Apps\PowerShell\" -Recurse -Force
|
||||
|
||||
Write-Host " [OK] Deployed to $PC" -ForegroundColor Green
|
||||
}
|
||||
```
|
||||
|
||||
### Step 3: Create Scheduled Task
|
||||
|
||||
**Task Configuration:**
|
||||
```xml
|
||||
Name: Update PC Asset Data
|
||||
Description: Daily collection of PC hardware and software inventory
|
||||
Trigger: Daily at 6:00 AM
|
||||
Action: C:\Apps\PowerShell\Update-PC-CompleteAsset-Silent.bat
|
||||
Run as: SYSTEM
|
||||
Run with highest privileges: Yes
|
||||
```
|
||||
|
||||
**GPO Scheduled Task:**
|
||||
```
|
||||
Computer Configuration
|
||||
→ Preferences
|
||||
→ Control Panel Settings
|
||||
→ Scheduled Tasks
|
||||
→ New → Scheduled Task (Windows 7+)
|
||||
```
|
||||
|
||||
**Settings:**
|
||||
- Name: `Update PC Asset Data`
|
||||
- Program: `C:\Apps\PowerShell\Update-PC-CompleteAsset-Silent.bat`
|
||||
- Trigger: Daily, 6:00 AM
|
||||
- Random delay: 0-10 minutes (built into script)
|
||||
- Run whether user logged on or not: Yes
|
||||
- Run with highest privileges: Yes
|
||||
|
||||
### Step 4: Test on Sample PCs
|
||||
|
||||
**Test on 3 different PC types:**
|
||||
|
||||
1. **Standard PC (Office):**
|
||||
```powershell
|
||||
# Run manually
|
||||
cd C:\Apps\PowerShell
|
||||
.\Update-PC-CompleteAsset.ps1
|
||||
```
|
||||
|
||||
**Expected:**
|
||||
- Detects PC type: Standard
|
||||
- Collects system info
|
||||
- Sends to https://tsgwp00525.rd.ds.ge.com/shopdb/api.asp
|
||||
- Success message
|
||||
|
||||
2. **Shopfloor PC (LTSC):**
|
||||
```powershell
|
||||
cd C:\Apps\PowerShell
|
||||
.\Update-PC-CompleteAsset.ps1
|
||||
```
|
||||
|
||||
**Expected:**
|
||||
- Detects PC type: Shopfloor
|
||||
- Collects system info + network interfaces + DNC config
|
||||
- Sends to production API
|
||||
- Success message
|
||||
|
||||
3. **Engineer PC (Has C:\Apps + V: drive):**
|
||||
```powershell
|
||||
cd C:\Apps\PowerShell
|
||||
.\Update-PC-CompleteAsset.ps1
|
||||
```
|
||||
|
||||
**Expected:**
|
||||
- Detects PC type: Engineer
|
||||
- Collects system info
|
||||
- Sends to production API
|
||||
- Success message
|
||||
|
||||
### Step 5: Verify in Database
|
||||
|
||||
```sql
|
||||
-- Check recent PC updates (last 24 hours)
|
||||
SELECT
|
||||
hostname,
|
||||
machinetypeid,
|
||||
serialnumber,
|
||||
lastupdated
|
||||
FROM machines
|
||||
WHERE pctypeid IS NOT NULL
|
||||
AND lastupdated >= DATE_SUB(NOW(), INTERVAL 24 HOUR)
|
||||
ORDER BY lastupdated DESC;
|
||||
```
|
||||
|
||||
### Step 6: Monitor Logs
|
||||
|
||||
**Check API logs on server:**
|
||||
```
|
||||
https://tsgwp00525.rd.ds.ge.com/shopdb/logs/api-2025-11-21.log
|
||||
```
|
||||
|
||||
**Check PowerShell logs on network share:**
|
||||
```
|
||||
S:\dt\cameron\scan\logs\CompleteAsset-[HOSTNAME]-[TIMESTAMP].log
|
||||
```
|
||||
|
||||
**Fallback location (if network share unavailable):**
|
||||
```
|
||||
C:\Apps\PowerShell\Logs\CompleteAsset-[HOSTNAME]-[TIMESTAMP].log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## URL Configuration Details
|
||||
|
||||
### Production URL
|
||||
|
||||
**Full URL:**
|
||||
```
|
||||
https://tsgwp00525.rd.ds.ge.com/shopdb/api.asp
|
||||
```
|
||||
|
||||
**Server:** tsgwp00525.rd.ds.ge.com
|
||||
**Protocol:** HTTPS (secure)
|
||||
**Path:** /shopdb/api.asp
|
||||
**Port:** 443 (default HTTPS)
|
||||
|
||||
### Network Requirements
|
||||
|
||||
**Firewall Rules:**
|
||||
- Allow outbound HTTPS (port 443) from all client PCs
|
||||
- Destination: tsgwp00525.rd.ds.ge.com
|
||||
- Protocol: TCP/443
|
||||
|
||||
**DNS Resolution:**
|
||||
- tsgwp00525.rd.ds.ge.com must resolve from client PCs
|
||||
- Test: `nslookup tsgwp00525.rd.ds.ge.com`
|
||||
|
||||
**Certificate:**
|
||||
- Server must have valid SSL certificate
|
||||
- Client PCs must trust certificate authority
|
||||
- If using self-signed cert, may need to add to trusted root CAs
|
||||
|
||||
**Network Share Access:**
|
||||
- All client PCs must have read/write access to `S:\dt\cameron\scan\logs`
|
||||
- Share permissions: DOMAIN\Domain Computers (Modify)
|
||||
- NTFS permissions: DOMAIN\Domain Computers (Modify)
|
||||
- If network share unavailable, script will fallback to local `C:\Apps\PowerShell\Logs\`
|
||||
|
||||
### URL Priority (Auto-Discovery)
|
||||
|
||||
If parameter not provided, script tries URLs in this order:
|
||||
|
||||
1. https://tsgwp00525.rd.ds.ge.com/shopdb/api.asp (PRODUCTION)
|
||||
2. http://192.168.122.151:8080/api.asp (DEV)
|
||||
3. http://localhost:8080/api.asp (Local test)
|
||||
4. (other fallbacks...)
|
||||
|
||||
---
|
||||
|
||||
## Rollback Instructions
|
||||
|
||||
If production deployment fails, revert to DEV URLs:
|
||||
|
||||
**Update-PC-CompleteAsset-Silent.bat:**
|
||||
```batch
|
||||
Line 27: echo Dashboard: http://192.168.122.151:8080/api.asp >> "%logfile%" 2>&1
|
||||
Line 60: -DashboardURL "http://192.168.122.151:8080/api.asp"
|
||||
```
|
||||
|
||||
**Update-PC-CompleteAsset.ps1:**
|
||||
```powershell
|
||||
Line 26: [string]$DashboardURL = "http://192.168.122.151:8080/api.asp",
|
||||
Line 70: First candidate = "http://192.168.122.151:8080/api.asp"
|
||||
Line 98: $defaultUrl = "http://192.168.122.151:8080/api.asp"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Verification Checklist
|
||||
|
||||
Before production rollout:
|
||||
|
||||
- [ ] Verify network share exists: `S:\dt\cameron\scan\logs`
|
||||
- [ ] Test network share write permissions from client PC
|
||||
- [ ] Test script on Standard PC
|
||||
- [ ] Test script on Shopfloor PC
|
||||
- [ ] Test script on Engineer PC
|
||||
- [ ] Verify logs written to `S:\dt\cameron\scan\logs`
|
||||
- [ ] Verify data appears in database
|
||||
- [ ] Check API logs on server
|
||||
- [ ] Test scheduled task execution
|
||||
- [ ] Confirm HTTPS certificate valid
|
||||
- [ ] Verify firewall allows outbound HTTPS
|
||||
- [ ] Test DNS resolution of tsgwp00525.rd.ds.ge.com
|
||||
- [ ] Deploy to pilot group (5-10 PCs)
|
||||
- [ ] Monitor for 1 week (check network share logs)
|
||||
- [ ] Deploy to all PCs via GPO
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Issue: Cannot reach dashboard
|
||||
|
||||
**Symptom:**
|
||||
```
|
||||
[FAIL] Cannot reach: The remote name could not be resolved
|
||||
```
|
||||
|
||||
**Causes:**
|
||||
1. DNS not resolving tsgwp00525.rd.ds.ge.com
|
||||
2. Firewall blocking port 443
|
||||
3. Server offline
|
||||
|
||||
**Fix:**
|
||||
```powershell
|
||||
# Test DNS
|
||||
nslookup tsgwp00525.rd.ds.ge.com
|
||||
|
||||
# Test HTTPS connectivity
|
||||
Test-NetConnection -ComputerName tsgwp00525.rd.ds.ge.com -Port 443
|
||||
|
||||
# Test API endpoint
|
||||
Invoke-RestMethod -Uri "https://tsgwp00525.rd.ds.ge.com/shopdb/api.asp?action=getDashboardData"
|
||||
```
|
||||
|
||||
### Issue: SSL certificate error
|
||||
|
||||
**Symptom:**
|
||||
```
|
||||
The underlying connection was closed: Could not establish trust relationship
|
||||
```
|
||||
|
||||
**Cause:** Self-signed or untrusted certificate
|
||||
|
||||
**Fix:**
|
||||
```powershell
|
||||
# Temporary bypass (testing only)
|
||||
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
|
||||
|
||||
# Permanent fix: Install certificate to Trusted Root
|
||||
Import-Certificate -FilePath "server-cert.crt" -CertStoreLocation Cert:\LocalMachine\Root
|
||||
```
|
||||
|
||||
### Issue: 401 Unauthorized
|
||||
|
||||
**Symptom:**
|
||||
```
|
||||
The remote server returned an error: (401) Unauthorized
|
||||
```
|
||||
|
||||
**Cause:** Server requires authentication
|
||||
|
||||
**Fix:**
|
||||
- Check IIS authentication settings
|
||||
- Ensure Anonymous Authentication enabled for api.asp
|
||||
- Or add credentials to script
|
||||
|
||||
### Issue: 500 Internal Server Error
|
||||
|
||||
**Symptom:**
|
||||
```
|
||||
The remote server returned an error: (500) Internal Server Error
|
||||
```
|
||||
|
||||
**Cause:** API error on server side
|
||||
|
||||
**Fix:**
|
||||
- Check server logs: `C:\inetpub\wwwroot\shopdb\logs\api-YYYY-MM-DD.log`
|
||||
- Check IIS logs: `C:\inetpub\logs\LogFiles\`
|
||||
- Verify database connectivity from server
|
||||
- Check ASP error details (disable friendly errors)
|
||||
|
||||
### Issue: Network log directory not accessible
|
||||
|
||||
**Symptom:**
|
||||
```
|
||||
WARNING: Network log directory S:\dt\cameron\scan\logs not accessible, using local Logs directory
|
||||
```
|
||||
|
||||
**Cause:** Network share not accessible or permissions issue
|
||||
|
||||
**Fix:**
|
||||
```powershell
|
||||
# Test network share access
|
||||
Test-Path "S:\dt\cameron\scan\logs"
|
||||
|
||||
# Verify drive mapping
|
||||
Get-PSDrive S
|
||||
|
||||
# Test write permissions
|
||||
New-Item -Path "S:\dt\cameron\scan\logs\test.txt" -ItemType File -Value "test" -Force
|
||||
Remove-Item "S:\dt\cameron\scan\logs\test.txt"
|
||||
```
|
||||
|
||||
**Permission Requirements:**
|
||||
- Share: `\\fileserver\share` mapped to S: drive
|
||||
- Share Permissions: Domain Computers (Read/Write)
|
||||
- NTFS Permissions: Domain Computers (Modify)
|
||||
- Ensure folder exists: `S:\dt\cameron\scan\logs`
|
||||
|
||||
---
|
||||
|
||||
## Production Readiness Status
|
||||
|
||||
✅ **Scripts Updated:** Both .bat and .ps1 files configured for production URL
|
||||
✅ **Documentation:** Complete deployment guide created
|
||||
✅ **Testing Plan:** 3-tier testing (Standard, Shopfloor, Engineer)
|
||||
✅ **Monitoring:** API logs and PowerShell logs configured
|
||||
✅ **Rollback Plan:** DEV URL reversion documented
|
||||
|
||||
**Ready for Deployment:** YES
|
||||
|
||||
**Recommended Timeline:**
|
||||
1. Day 1-2: Test on 3 PCs (one of each type)
|
||||
2. Day 3-7: Deploy to pilot group (10 PCs)
|
||||
3. Day 8-14: Monitor pilot group
|
||||
4. Day 15+: Full deployment via GPO to all PCs
|
||||
|
||||
---
|
||||
|
||||
## Contact
|
||||
|
||||
**For deployment issues:**
|
||||
- Check this documentation
|
||||
- Review PowerShell logs on client PC
|
||||
- Review API logs on server
|
||||
- Contact: IT Asset Management Team
|
||||
|
||||
**File Locations:**
|
||||
- Dev: `/home/camp/projects/powershell/`
|
||||
- Production Scripts: `C:\Apps\PowerShell\` (on PCs)
|
||||
- Production Logs: `S:\dt\cameron\scan\logs\` (network share)
|
||||
- Server: `https://tsgwp00525.rd.ds.ge.com/shopdb/`
|
||||
|
||||
---
|
||||
|
||||
**Document Version:** 1.0
|
||||
**Last Updated:** 2025-11-21
|
||||
**Status:** Production Ready
|
||||
Reference in New Issue
Block a user