mercoledì 28 settembre 2022

PowerShell: Creare un collegamento per connessione dispositivi Bluetooth

Nell'articolo PowerShell: Creare un collegamento è stato mostrato come creare un collegamento sul desktop ad un'applicazione utilizzando PowerShell. Modificando lo script PowerShell possiamo creare un collegamento sul desktop per la connessione/disconnessione dei dispositivi Bluetooth. Lo script sarà del tipo mostrato di seguito

 # Individua la cartella Desktop in cui creare il collegamento   
 $desktop = [Environment]::GetFolderPath('Desktop')  
 # Specifica il nome del collegamento "bluetooth.lnk" che verrà creato sul desktop   
 $path = Join-Path -Path $desktop -ChildPath 'bluetooth.lnk'  
 # Crea un oggetto WScript.Shell da utilizzare per la creazione del collegamento   
 $shell = New-Object -ComObject WScript.Shell  
 # Prepara il collegamento sul desktop indicando il percorso e nome  
 $shortcut = $shell.CreateShortcut($path)  
 # Specifica il Target, in questo caso l'applicazione da avviare   
 $shortcut.TargetPath = 'explorer.exe'  
 # Specifica gli argomenti da passare ad explorer.exe  
 $shortcut.Arguments = 'ms-settings-connectabledevices:devicediscovery'  
 # Assegna al collegamento l'icona bluetooth  
 $shortcut.IconLocation = 'fsquirt.exe,0'  
 # Salva il collegamento   
 $shortcut.Save()  
PowerShell Link Bluetooth
FIG 1 - PowerShell Link Bluetooth


martedì 27 settembre 2022

PowerShell: Modificare la data di scadenza di una password in Active Directory

Un metodo per prolungare  il periodo di tempo in cui un utente può mantenere la propria password consiste nell'impostare l'attributo pwdLastSet sulla data corrente. 
Di seguito i comandi che permettono di prolungare la scadenza della password su un account specificato: 

 $Username = (Read-Host -Prompt "Username")   
 Set-ADUser -Identity $Username -Replace @{pwdLastSet=-1}  


Attributo pwdLastSet in Active Directory
FIG 1 - Attributo pwdLastSet in Active Directory





lunedì 26 settembre 2022

PowerShell: Forzare il cambio password per tutti gli utenti appartenenti ad una UO

Per forzare la reimpostazione della password da parte degli utenti appartenenti ad una specifica UO è possibile farlo in blocco utilizzando i cmdlet Get-ADUser e Set-ADUser.
Il comando mostrato di seguito utilizza un filtro per ottenere gli utenti appartenenti all'unità organizzativa (UO) "Direzione" e, tramite pipe, per ciascun account viene impostata l'opzione Cambiamento obbligatorio password.
 Get-ADUser -Filter * -SearchScope OneLevel -SearchBase "OU=Direzione,DC=mycompany,DC=local" | Set-ADUser -ChangePasswordAtLogon $true  
Per agire anche sulle UO sottostanti basta modificare il paramentro -SearchScope passandogli il valore Subtree
 Get-ADUser -Filter * -SearchScope Subtree -SearchBase "OU=Direzione,DC=mycompany,DC=local" | Set-ADUser -ChangePasswordAtLogon $true  
PowerShell, ChangePasswordAtLogon
FIG 1 - PowerShell, ChangePasswordAtLogon

Utenti e computer di Active Directory, Cambiamento obbligatorio password
FIG 2 - Utenti e computer di Active Directory, Cambiamento obbligatorio password




domenica 25 settembre 2022

PowerShell: Nessuna scadenza password per un account in Active Directory

Per fare in modo che la password di un account in Active Directory non abbia scadenza, è possibile utilizzare il cmdlet Set-ADUser insieme al parametro -PasswordNeverExpires.
Il comando sarà simile a
Set-ADUser -Identity <utenza> -PasswordNeverExpires $true
dove al posto di <utenza> va specificato l'account in AD su cui si intende agire.

Se il comando va integrato all'interno di uno script, è possibile fare in modo che ad ogni esecuzione venga richiesto di specificare l'account in AD a cui disabilitare la scadenza della password. Ad esempio è possibile creare uno script con le seguenti istruzioni
 $User = (Read-Host -Prompt "Username")  
 Set-ADUser -Identity $User -PasswordNeverExpires $true  
   
Andando a verificare in Utenti e computer di Active Directory, dopo aver eseguito il comando, vedremo che per l'account specificato è stata attivata la voce Nessuna scadenza password.
Active Directory, Nessuna scadenza password
FIG 1 - Active Directory, Nessuna scadenza password






venerdì 23 settembre 2022

PowerShell: Modificare le proprietà di logon di un servizio

Per modificare le proprietà di logon di un servizio tramite PowerShell, si utilizzano i cmdlet Get-Credential e Set-Service

Il codice illustrato in questo articolo andrà a modificare il servizio AppReadiness (Preparazione app) che consente di preparare le app per l'utilizzo al primo accesso dell'utente al PC e all'aggiunta di nuove app. Il servizio viene eseguito di default utilizzando l'account Local System. Attraverso i seguenti comandi PowerShell faremo in modo che il servizio venga eseguito con un account da noi specificato (le credenziali ci verranno richieste tramite Get-Credential).
 $credenziali = Get-Credential  
 Set-Service -Name "AppReadiness" -Credential $credenziali  
   
Da notare che il  parametro Set-Service -Credential è supportato solo in PowerShell 6 e successivi.




giovedì 22 settembre 2022

PowerShell: Forzare un utente in AD a cambiare password al logon successivo

Per fare in modo che un utente in Active Directory, al successivo logon, modifichi la password si può utilizzare il cmdlet Set-ADUser.

Il comando è molto semplice, basta indicare l'account su cui intervenire e passare al parametro ChangePasswordAtLogon il valore $true (oppure 1). Il comando sarà simile a:
Set-ADUser -Identity Giovanni.Lubrano -ChangePasswordAtLogon $true
Set-ADUser, ChangePasswordAtLogon
FIG 1 - Set-ADUser, ChangePasswordAtLogon

Andando a verificare in Utenti e computer di Active Directory, dopo aver eseguito il comando, vedremo che per l'account specificato è stata attivata la voce Cambiamento obbligatorio password.
Proprietà account in AD
FIG 2 - Proprietà account in AD


Volendo possiamo creare un semplice script che ci richiede l'account su cui forzare il cambio password al logon successivo.
 $User = (Read-Host -Prompt "Username")  
 Set-ADUser -Identity $User -ChangePasswordAtLogon $true  






lunedì 19 settembre 2022

PowerShell: Nessuna scadenza password per un account locale

Utilizzando il cmdlet Set-LocalUser possiamo rimuovere la scadenza della password per un account locale. Le seguenti istruzioni, che è possibile salvare in un file .PS1, consentono di specificare un account locale e impostare Nessuna scadenza password.
 $User = (Read-Host -Prompt "Username")  
 Set-LocalUser -Name $User -PasswordNeverExpires $true  

Set-LocalUser -PasswordNeverExpires
FIG 1 - Set-LocalUser -PasswordNeverExpires


Per verificare se il comando è andato a buon fine possiamo procedere nel seguente modo:
  • Aprire una finestra di Esplora file, cliccare con il tasto destro del mouse su Questo PC e selezionare Gestione. In alternativa premere la combinazione di tasti Win+R e nella finestra Esegui digitare compmgmt.msc seguito da invio.
    Gestione
    FIG 2 - Gestione

  • Espandere la voce Utenti e gruppi locali e selezionare Utenti.
    Gestione computer, Utenti
    FIG 3 - Gestione computer, Utenti

  • Doppio click con il tasto sinistro del mouse sull'account modificato e verificare che l'opzione Nessuna scadenza password sia attiva.

    Nessuna scadenza password
    FIG 4 - Nessuna scadenza password






domenica 11 settembre 2022

PowerShell: Modificare la password di un account di Active Directory

Il cmdlet Set-ADAccountPassword consente di impostare la password di un account utente in Active Directory, di un computer o di un account di servizio.

Sintassi

Set-ADAccountPassword
   [-WhatIf]
   [-Confirm]
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   [-Identity] <ADAccount>
   [-NewPassword <SecureString>]
   [-OldPassword <SecureString>]
   [-Partition <String>]
   [-PassThru]
   [-Reset]
   [-Server <String>]
   [<CommonParameters>]
   
   

Parametri

-AuthType
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1
Per il metodo di autenticazione Basic è necessaria una connessione Secure Sockets Layer (SSL).  

-Confirm
Chiede conferma prima di eseguire il cmdlet.

-Credential
Specifica le credenziali dell'account utente da utilizzare per eseguire questa attività. Le credenziali predefinite sono quelle dell'utente attualmente connesso, a meno che il cmdlet non venga eseguito da un'unità provider di Active Directory module for Windows PowerShell. Se il cmdlet viene eseguito da tale unità provider, l'account associato all'unità è quello predefinito.

Per specificare questo parametro, è possibile digitare un nome utente, ad esempio User1 o Domain01\User01, oppure specificare un oggetto PSCredential. Se si specifica un nome utente per questo parametro, il cmdlet richiederà una password.

È anche possibile creare un oggetto PSCredential utilizzando uno script o il cmdlet Get-Credential. È quindi possibile impostare il parametro Credential sull'oggetto PSCredential.

Se le credenziali che agiscono non hanno l'autorizzazione a livello di directory per eseguire l'attività, il modulo Active Directory per Windows PowerShell restituirà un errore di terminazione.

-Identity
Specifica un oggetto di dominio Active Directory fornendo uno dei seguenti valori 
  • Distinguished name
  • GUID (objectGUID)
  • Security identifier (objectSid)
  • Security Account Manager account name (SAMAccountName

-NewPassword
Specifica il valore di una nuova password. Questo valore viene memorizzato come stringa crittografata.

-OldPassword
Specifica il valore della vecchia password. Questo valore viene elaborato come stringa crittografata.

-Partition
Specifica il distinguished name di una partizione di Active Directory. Il distinguished name deve essere uno dei contesti di denominazione del server di directory corrente. Il cmdlet cerca in questa partizione l'oggetto definito dal parametro Identity.

In molti casi, se non viene specificato alcun valore, viene utilizzato un valore predefinito per il parametro Partition. Le regole per determinare il valore predefinito sono riportate di seguito. Si noti che le regole elencate per prime vengono valutate per prime e che, una volta determinato un valore predefinito, non vengono valutate altre regole.

Negli ambienti Active Directory Domain Services, un valore predefinito per Partition viene impostato nei seguenti casi:
  • Se il parametro Identity è impostato su un distinguished name, il valore predefinito di Partition viene generato automaticamente da questo distinguished name.
  • Se si eseguono i cmdlet da un'unità del provider di Active Directory, il valore predefinito di Partition viene generato automaticamente dal percorso corrente dell'unità.
  • Se non si applica nessuno dei casi precedenti, il valore predefinito di Partition viene impostato sulla partizione o sul contesto di denominazione predefinito del dominio di destinazione.

Negli ambienti AD LDS, il valore predefinito di Partition viene impostato nei seguenti casi:
  • Se il parametro Identity è impostato su un distinguished name, il valore predefinito di viene generato automaticamente da questo distinguished name.
  • Se si eseguono i cmdlet da un'unità del provider di Active Directory, il valore predefinito di Partition viene generato automaticamente dal percorso corrente dell'unità.
  • Se l'istanza AD LDS di destinazione ha un contesto di denominazione predefinito, il valore predefinito di Partition è impostato sul contesto di denominazione predefinito. Per specificare un contesto di denominazione predefinito per un ambiente AD LDS, impostare la proprietà msDS-defaultNamingContext dell'oggetto agente del servizio di directory di Active Directory (nTDSDSA) per l'istanza AD LDS.
  • Se non si applica nessuno dei casi precedenti, il parametro Partition assumerà alcun valore predefinito.
-PassThru
Restituisce un oggetto che rappresenta l'elemento con cui si sta lavorando. Per impostazione predefinita, non viene generato alcun output.

-Reset
Specifica la reimpostazione della password di un account. Quando si utilizza questo parametro, è necessario impostare il parametro NewPassword. Non è necessario specificare il parametro OldPassword.

-Server
Specifica l'istanza di Active Directory Domain Services a cui connettersi:
  • Fully qualified domain name
  • NetBIOS name
  • Fully qualified directory server name
  • NetBIOS name
  • Fully qualified directory server name e la porta
-WhatIf
Mostra cosa accadrebbe se il cmdlet venisse eseguito. Il cmdlet non viene eseguito.

Esempi

Esempio 1
Set-ADAccountPassword -Identity Giovanni.Lubrano
Viene richiesta la vecchia password e la nuova password da impostare per l'account specificato.
Set-ADAccountPassword
FIG 1 - Set-ADAccountPassword

Esempio 2
Set-ADAccountPassword -Identity "CN=Giovanni Lubrano Lavadera,OU=Utenti,OU=Direzione,DC=mycompany,DC=local" -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "p@assw0rd1234" -Force)
Questo comando imposta la password dell'account utente con DistinguishedName "CN=Giovanni Lubrano Lavadera,OU=Utenti,OU=Direzione,DC=mycompany,DC=local"

Esempio 3
Set-ADAccountPassword -Identity Giovanni.Lubrano -OldPassword (ConvertTo-SecureString -AsPlainText "p@assw0rd1234" -Force) -NewPassword (ConvertTo-SecureString -AsPlainText "qwerty@01234" -Force)
Questo comando imposta la password dell'account utente con SamAccountName GLubrano su qwerty@01234. L'uso di -NewPassword con un valore, senza fornire il valore del parametro -OldPassword, reimposta ugualmente la password.

Esempio 4
Set-ADAccountPassword -Identity Giovanni.Lubrano -NewPassword (ConvertTo-SecureString -AsPlainText "qwerty@01234" -Force) -Reset
Analogo all'esempio 3 con la differenza che in questo caso viene specificata solo la nuova password e viene utilizzato il parametro -Reset.
Set-ADAccountPassword -NewPassword
FIG 2 - Set-ADAccountPassword -NewPassword

Esempio 5
$User = (Read-Host -Prompt "Username")
$NewPassword = (Read-Host -Prompt "Nuova password" -AsSecureString
Set-ADAccountPassword -Identity $User -NewPassword $NewPassword -Reset
Viene richiesto di specificare l'account utente su cui agire e la nuova password da assegnare all'account.