En este artículo, voy a mostraros un ejemplo de script de inicio de sesión escrito en PowerShell.
¿Por qué escribir un script de inicio de sesión en PowerShell cuando VBScript funciona tal y como se muestra en los siguientes tutoriales:
Por una razón «simple»: el lenguaje VBS dejará de ser compatible de forma nativa con Windows 11 en el año 2024, pasando a ser una funcionalidad opcional. Recursos para funciones obsoletas
En su lugar, a continuación les propongo un script de PowerShell como alternativa para asignar unidades de red e impresoras al iniciar sesión.
<#
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"]
}
}
}
}De lo contrario, la alternativa es utilizar las políticas de grupo (GPO) para realizar estas operaciones.
Si tienes otros scripts en VBS, aún estás a tiempo de planificar su migración.
