PowerShell: generare .Mobileconfig partendo dai PFX

| |

Una raccolta di riferimenti, più che altro, forse utile per chi fuori da qui utilizza strumenti per il controllo remoto dei dispositivi aziendali come iPhone o iPad e necessita di aggiungere rapidamente configurazioni al dispositivo. Stavolta niente pappa pronta, più paio di collegamenti utili per costruire, come ho fatto io, un buono script PowerShell che ti permetta di creare un file di tipo MobileConfig da dare in pasto a iPhone o iPad (anche via console di terze parti come Cisco Meraki o AirWatch).

PowerShell: generare .Mobileconfig partendo dai PFX

Giusto per capirci un po’ meglio. Il file MobileConfig è in realtà un XML che puoi aprire con qualsiasi editor di testo (io utilizzo Notepad++ in ogni caso), e che propone una serie di informazioni in grado di istruire in un colpo solo il dispositivo di destinazione. Un collegamento a una particolare rete WiFi, un certificato utente che permette l’autenticazione su applicazioni web aziendali, ecc. Molte di queste informazioni possono rimanere identiche tra più utenti, altre invece no (come il certificato di sicurezza personale che permette l’autenticazione su una WiFi, per esempio).

Per questo motivo ho scritto un codice PowerShell che fonda insieme le informazioni e che, prendendo in pasto il file PFX generato da un server di dominio (esportazione del certificato utente e della chiave privata, protetto da password), generi autonomamente il XML con estensione MobileConfig da caricare successivamente sulle piattaforme di management dei dispositivi mobili.

Si tratta tutto sommato di comandi basilari, come un Add-Content "Utente.mobileconfig" -value $blocco -encoding UTF8 dove il $blocco è magari una parte di quelle informazioni precedentemente inserite nella variabile, che rimane sempre uguale, che può essere replicata per ciascun file MobileConfig da generare. Poi c’è il PFX, che va encodato e poi inserito in una variabile che utilizzerò in seguito, utilizzando un blocco simile a questo:

#Inietto contenuto PFX personale
certutil -encode ("$PFXDir\" + $($i.Name)) "Temp.enc"
$base64 = Get-Content "Temp.enc" 
$base64 = $base64[1..($base64.count - 1)]
Add-Content "Utente.mobileconfig" -value $base64 -encoding UTF8
#Rimuovo file ENC precedentemente creato
Remove-Item "Temp.enc"

Dove $PFXDir sarà la directory contenente i file PFX (ma va?) e Temp.enc viene generato esclusivamente per poterne catturare il contenuto (encodato in base64).

Da qui in poi si potranno aggiungere ulteriori blocchi già stabiliti e che rimarranno sempre uguali, se necessario (occhio agli UUID per certificati e impostazioni, ogni MobileConfig dovrà averne uno proprio, diverso dall’altro, basterà un’istruzione di tipo [guid]::NewGuid()), fino poi a chiudere il file, fino all’ultimo $blocco.

Ci ho messo un po’ a capire bene la logica che sta dietro la generazione automatica dei MobileConfig, ma una volta arrivato a far funzionare il tutto, è tutto diventato tutto più semplice. Partendo infatti da una cartella contenente i tuoi file PFX, potrai far svolgere il lavoro alla PowerShell semplicemente richiamando un blocco di questo tipo:

$ListPFX = Get-ChildItem $PFXDir | where { ! $_.PSIsContainer } | Select-Object Name
foreach ($i in $ListPFX) {
#Clono il nome PFX (senza estensione) per generare il MobileConfig
$dest = [System.IO.Path]::GetFileNameWithoutExtension($($i.Name))

Dove $ListPFX corrisponderà al contenuto della cartella contenente i PFX, che verrà quindi utilizzata per fare il lavoro sporco dal primo all’ultimo MobileConfig da generare. Vorrei poter pubblicare il codice sorgente del mio PS1 ma ci sono davvero troppi riferimenti aziendali, impiegherei un po’ di tempo a pulirlo e generalizzarlo, rischiando poi di confonderti maggiormente le idee ;-)

Con l’occasione ti lascio qualche collegamento alle fonti utilizzate:

Buon lavoro!

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Commenti
Inline Feedbacks
View all comments