diff --git a/README.html b/README.html new file mode 100644 index 0000000..a4364f6 --- /dev/null +++ b/README.html @@ -0,0 +1,340 @@ +

RDP - IntuneWin Pakke

+
+

Denne pakke installerer og signerer RDP-genveje på skrivebordet via + et selvsigneret certifikat, så brugerne ikke får en sikkerhedsadvarsel + ved åbning. Som standard arbejder alle scripts mod det + offentlige skrivebord + (C:\Users\Public\Desktop). Brug -AllUsers + switchen for at køre mod alle brugeres individuelle skriveborde i + stedet. +

+
+
+

Indhold

+ +
+

Pakkens indhold

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FilFormål
Install.ps1Kopierer RDP-filer til skrivebord(e), opretter selvsigneret + certifikat og signerer alle RDP-filer. Understøtter + -AllUsers switch. +
Detect.ps1Tjekker at specifikke forventede .rdp-filer (defineret i + $expectedFiles array) eksisterer på skrivebord(e). + Understøtter -AllUsers switch. +
Uninstall.ps1Fjerner RDP-filer fra skrivebord(e). Understøtter + -AllUsers switch. +
SignOnly.ps1Signerer eksisterende RDP-filer på skrivebord(e) — ingen + filkopiering. Understøtter -AllUsers switch.
SignOnly_detect.ps1Registrerer om certifikat er til stede og alle RDP-filer på + skrivebord(e) er signerede. Understøtter -AllUsers + switch.
Clearsigning.ps1Fjerner signaturer fra RDP-filer og rydder op i certifikat og + registry (til oprydning/debug). Understøtter -AllUsers + switch.
sandbox.ps1Kombineret install + detect script til lokal sandkasse-test. + Understøtter -AllUsers switch.
rdp-files\*.rdpKilde-RDP-filer der installeres på skrivebord(e)
+

↑ Tilbage til toppen

+
+

Sådan opsætter du Detect.ps1

+

Før du uploader Detect.ps1 til Intune som + registreringsregel, skal du åbne filen og udfylde + $expectedFiles array med de .rdp filnavne der + ligger i .\\rdp-files\\: +

+
+
$expectedFiles = @(
+    "Server1.rdp",
+    "Server2.rdp",
+    "DesktopApp.rdp"
+)
+
+

Når scriptet kører: - Uden -AllUsers: tjekker at alle + filer i $expectedFiles findes på det offentlige skrivebord + (C:\Users\Public\Desktop) - Med -AllUsers: + tjekker alle filer i $expectedFiles på tværs af alle + brugeres skriveborde - Returnerer exit 0 = installeret + (alle filer fundet) - Returnerer exit 1 = ikke installeret + (en eller flere filer mangler)

+
+

Vigtigt: Husk at opdatere + $expectedFiles hver gang du tilføjer eller fjerner + .rdp filer i pakken, ellers vil detekteringen være + forkert. +

+
+
+

Intune App Konfiguration

+

Program

+ +

Registreringsregel

+

Brug et brugerdefineret registreringsscript: - + Scriptfil: Detect.ps1 - Kør script + som 32-bit proces på 64-bit klienter: Nej - Gennemtving + scriptsignaturkontrol: Nej +

+

Registreringslogik: - Uden -AllUsers: tjekker at alle + .rdp-filer er til stede på det offentlige skrivebord + (C:\Users\Public\Desktop) - Med -AllUsers: + tjekker alle brugeres skriveborde under C:\Users\ - + Returnerer exit 0 = installeret - Returnerer + exit 1 = ikke installeret +

+

↑ Tilbage til toppen

+
+

Hvad Install.ps1 gør

+
    +
  1. Finder målskrivebord(e) — offentligt skrivebord som standard, alle + brugeres skriveborde med -AllUsers
  2. +
  3. Kopierer alle .rdp-filer fra .\rdp-files\ + til de fundne skrivebord(e)
  4. +
  5. Søger efter eksisterende selvsigneret certifikat + (CN=RDPSign) i Cert:\LocalMachine\My
  6. +
  7. Opretter et nyt selvsigneret kodesigneringscertifikat hvis intet + findes (gyldigt i 25 år, ikke-eksporterbart)
  8. +
  9. Tilføjer certifikatet til Trusted Root og + Trusted Publishers i den lokale maskines + certifikatstore +
  10. +
  11. Tilføjer certifikatets thumbprint til registry-nøglen + TrustedCertThumbprints +
  12. +
  13. Signerer alle .rdp-filer på skrivebord(e) med + rdpsign.exe /sha256 +
  14. +
  15. Sætter RedirectionWarningDialogVersion = 1 i registry + for at undertrykke RDP-advarselsdialoger
  16. +
+

↑ Tilbage til toppen

+
+

AllUsers Switch

+

Alle scripts understøtter -AllUsers switchen. Som + standard — uden -AllUsers — køres alle scripts kun mod det + offentlige skrivebord + (C:\Users\Public\Desktop). Når -AllUsers + angives, itererer scriptet i stedet over alle brugerprofiler under + C:\Users\ og behandler hver brugers + Desktop-mappe. +

+
+
# Kun offentligt skrivebord (standard)
+.\Install.ps1
+
+# Alle brugeres skriveborde
+.\Install.ps1 -AllUsers
+
+

↑ Tilbage til toppen

+
+

Registry-ændringer

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StiVærdiTypeData
HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal ServicesTrustedCertThumbprintsStringCertifikatets thumbprint
HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services\ClientRedirectionWarningDialogVersionDWORD1
+

↑ Tilbage til toppen

+
+

Logning og fejlfinding

+ + + + + + + + + + + + + + + + + + + + + + + + + +
ScriptLogfil
Install.ps1C:\Intune\DesktopShortcuts.log
Detect.ps1C:\Intune\DesktopShortcuts.log
Uninstall.ps1C:\Intune\DesktopShortcuts.log
SignOnly.ps1C:\Intune\RDPSign.log
+

↑ Tilbage til toppen

+
+

SignOnly Intune App + Konfiguration

+

Program

+ +

Registreringsregel

+

Brug et brugerdefineret registreringsscript: - + Scriptfil: SignOnly_detect.ps1 - + Kør script som 32-bit proces på 64-bit klienter: Nej - + Gennemtving scriptsignaturkontrol: Nej +

+

Registreringslogik: - Tjekker at CN=RDPSign-certifikatet + findes i My, Root og + TrustedPublisher stores - Tjekker at thumbprint er til + stede i registry - Uden -AllUsers: tjekker at alle + .rdp-filer på det offentlige skrivebord er signerede - Med + -AllUsers: tjekker alle .rdp-filer på tværs af + alle brugeres skriveborde - Returnerer exit 0 + + "Detected" = installeret - Returnerer exit 1 = + ikke installeret +

+

↑ Tilbage til toppen

+
+

Øvrige scripts i pakken

+
+

Bemærk: Alle PowerShell-scripts er pakket ind i + samme IntuneWin-pakke. Det betyder at man altid kan kalde på et + vilkårligt script direkte fra Intune eller manuelt, f.eks.:

+
+
powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File .\Install.ps1
+powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File .\Install.ps1 -AllUsers
+powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File .\SignOnly.ps1
+powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File .\SignOnly.ps1 -AllUsers
+powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File .\Clearsigning.ps1
+powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File .\Clearsigning.ps1 -AllUsers
+
+

osv. for alle scripts i pakken.

+
+

SignOnly.ps1

+

Signerer alle eksisterende .rdp-filer på skrivebord(e) + uden at kopiere filer. Nyttigt til gensignering efter en opdatering + eller hvis filer allerede er installeret. Kør som administrator. + Understøtter -AllUsers switch.

+

SignOnly_detect.ps1

+

Registreringsscript til brug med SignOnly.ps1 som + Intune-pakke. Tjekker: - Certifikat findes i My, + Root og TrustedPublisher stores - Thumbprint + er til stede i registry - Alle .rdp-filer på skrivebord(e) + indeholder en gyldig signatur +

+

Understøtter -AllUsers switch.

+

Clearsigning.ps1

+

Fjerner alle signeringsartefakter. Nyttigt til test eller oprydning. + Kør som administrator. Understøtter -AllUsers switch. - + Fjerner signscope- og signature-linjer fra + alle .rdp-filer på skrivebord(e) - Fjerner + CN=RDPSign-certifikatet fra My, + Root og TrustedPublisher stores - Fjerner + TrustedCertThumbprints fra registry - Fjerner + RedirectionWarningDialogVersion fra registry +

+

sandbox.ps1

+

Kombinerer install og detect i ét script til lokal sandkasse-test. + Understøtter -AllUsers switch. Kør fra mappen der + indeholder rdp-files\ som administrator. Output skrives til + både konsollen og C:\Intune\DesktopShortcuts.log.

+

↑ Tilbage til toppen

\ No newline at end of file diff --git a/README.md b/README.md index e92f033..59ee5a5 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ - [Pakkens indhold](#pakkens-indhold) - [Intune App Konfiguration](#intune-app-konfiguration) - [Hvad Install.ps1 gør](#hvad-installps1-gør) +- [Sådan opsætter du Detect.ps1](#sådan-opsætter-du-detectps1) - [AllUsers Switch](#allusers-switch) - [Registry-ændringer](#registry-ændringer) - [Logning og fejlfinding](#logning-og-fejlfinding) @@ -24,7 +25,7 @@ | Fil | Formål | |-----|--------| | `Install.ps1` | Kopierer RDP-filer til skrivebord(e), opretter selvsigneret certifikat og signerer alle RDP-filer. Understøtter `-AllUsers` switch. | -| `Detect.ps1` | Registrerer om alle RDP-filer fra pakken er til stede på skrivebord(e). Understøtter `-AllUsers` switch. | +| `Detect.ps1` | Tjekker at specifikke forventede .rdp-filer (defineret i `$expectedFiles` array) eksisterer på skrivebord(e). Understøtter `-AllUsers` switch. | | `Uninstall.ps1` | Fjerner RDP-filer fra skrivebord(e). Understøtter `-AllUsers` switch. | | `SignOnly.ps1` | Signerer eksisterende RDP-filer på skrivebord(e) — ingen filkopiering. Understøtter `-AllUsers` switch. | | `SignOnly_detect.ps1` | Registrerer om certifikat er til stede og alle RDP-filer på skrivebord(e) er signerede. Understøtter `-AllUsers` switch. | @@ -36,6 +37,28 @@ --- +## Sådan opsætter du Detect.ps1 + +Før du uploader `Detect.ps1` til Intune som registreringsregel, skal du åbne filen og udfylde `$expectedFiles` array med de `.rdp` filnavne der ligger i `.\\rdp-files\\`: + +```powershell +$expectedFiles = @( + "Server1.rdp", + "Server2.rdp", + "DesktopApp.rdp" +) +``` + +Når scriptet kører: +- Uden `-AllUsers`: tjekker at alle filer i `$expectedFiles` findes på det offentlige skrivebord (`C:\Users\Public\Desktop`) +- Med `-AllUsers`: tjekker alle filer i `$expectedFiles` på tværs af alle brugeres skriveborde +- Returnerer `exit 0` = installeret (alle filer fundet) +- Returnerer `exit 1` = ikke installeret (en eller flere filer mangler) + +> **Vigtigt:** Husk at opdatere `$expectedFiles` hver gang du tilføjer eller fjerner `.rdp` filer i pakken, ellers vil detekteringen være forkert. + +--- + ## Intune App Konfiguration ### Program diff --git a/app/Detect.ps1 b/app/Detect.ps1 index 04774f1..6a01ea6 100644 --- a/app/Detect.ps1 +++ b/app/Detect.ps1 @@ -1,5 +1,7 @@ # ============================================================ # CHANGELOG +# v1.2 - Checks for specific expected .rdp filenames instead +# of just "any .rdp file exists on desktop". # v1.1 - Added -AllUsers switch to check all user desktops # instead of only the public desktop. # Added Get-DesktopPaths helper function. @@ -10,6 +12,16 @@ param( [switch]$AllUsers ) +# ============================================================ +# Update this list whenever .rdp files are added or removed +# from the rdp-files\\ folder. +# ============================================================ +$expectedFiles = @( + # Add your .rdp filenames here, e.g.: + # "RemoteServer1.rdp", + # "RemoteServer2.rdp" +) + # Setup logging $baseFolder = Join-Path $env:SystemDrive "Intune" $logFile = Join-Path $baseFolder "DesktopShortcuts.log" @@ -37,28 +49,21 @@ function Get-DesktopPaths { } try { - $desktopPaths = Get-DesktopPaths + $desktopPaths = Get-desktopPaths $allFound = $true foreach ($desktopPath in $desktopPaths) { - $rdpFiles = Get-ChildItem -Path "$desktopPath\*.rdp" -ErrorAction SilentlyContinue - - if ($rdpFiles.Count -eq 0) { - Write-Log "DETECT [FAIL]: No .rdp files found on desktop: $desktopPath" - $allFound = $false - continue - } - - foreach ($file in $rdpFiles) { - if (-not (Test-Path (Join-Path $desktopPath $file.Name))) { - Write-Log "DETECT [FAIL]: Missing: $($file.Name) on $desktopPath" + foreach ($fileName in $expectedFiles) { + $targetFile = Join-Path $desktopPath $fileName + if (-not (Test-Path $targetFile)) { + Write-Log "DETECT [FAIL]: Missing: $fileName on $desktopPath" $allFound = $false } } } if ($allFound) { - Write-Log "DETECT [OK]: All .rdp files found on all desktop(s)" + Write-Log "DETECT [OK]: All expected .rdp files found" exit 0 } else { exit 1