Dans ce article, je vais vous donner un exemple de script d’ouverture de session écrit en PowerShell.
Pourquoi écrire un script en PowerShell d’ouverture de session alors que VBScript fonctionne comment présenter dans les tutoriels suivants :
Pour une raison « simple », le langage vbs ne va plus être pris en charge nativement dans Windows 11 dans l’année 2024, cela sera une fonctionnalité facultative. Resources for deprecated features
A la place, je vous propose ci-après un script PowerShell en alternative pour mapper les lecteurs réseaux et imprimantes en ouverture de session.
<#
Sample login script with Network Drives mapping and Printer
#>
$NetworkDrives = @{
"Drive1" = @{
"letter" = "M"
"unc" = "\\file-server-1\share-name"
"memberof" = "GL_SHARE-XX"
};
"Drive2" = @{
"letter" = "N"
"unc" = "\\file-server-2\share-name"
"memberof" = ""
}
}
$NetworkPrinters = @{
"printer1" = @{
"unc" = "\\printer-server\printer-share-1"
"memberof" = ""
};
"printer2" = @{
"unc" = "\\printer-server\printer-share-2"
"memberof" = "GL_PRINTER-XX"
}
}
function Test-ADGroupMembership {
param (
[string]$GroupName
)
# Fetch identity information about current user
$currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent()
# Grab group SIDs from the users token
$groupTokenSIDs = $currentUser.Groups
# Translate the SID references to account/group names
$Groups = $groupTokenSIDs |Where-Object { $_.AccountDomainSid } |ForEach-Object { $_.Translate([System.Security.Principal.NTAccount]) }
# Test if list contains target group
if($Groups |Where-Object { $_.Value -like "*\$GroupName" }){
#"$env:USERNAME is a member of $GroupName"
return $true
}
return $false
}
Foreach( $NetworkDrive in $NetworkDrives ){
Foreach( $Drive in $NetworkDrive.Values ){
if( $Drive["memberof"] -eq ""){
# Add Drive
New-PSDrive -Name $Drive["letter"] -Root $Drive["unc"] -Persist -PSProvider FileSystem -Scope Global
}else{
$isMember = Test-ADGroupMembership -GroupName $Drive["memberof"]
if( $isMember ){
# Add Drive
New-PSDrive -Name $Drive["letter"] -Root $Drive["unc"] -Persist -PSProvider FileSystem -Scope Global
}
}
}
}
Foreach( $NetworkPrinter in $NetworkPrinters ){
Foreach( $Printer in $NetworkPrinter.Values ){
if( $Printer["memberof"] -eq ""){
# Add Printer
Add-Printer -ConnectionName $Printer["unc"]
}else{
$isMember = Test-ADGroupMembership -GroupName $Drive["memberof"]
if( $isMember ){
# Add Printer
Add-Printer -ConnectionName $Printer["unc"]
}
}
}
}Sinon l’alternative est d’utilisé les stratégies de groupe (GPO) pour faire ces opérations.
Si vous avez d’autre script en VBS, c’est encore le moment d’anticipé leur migration.
