Я пытался установить общий принтер на свой локальный компьютер в контексте текущего вошедшего в систему пользователя, а не пользователя, который запускает сценарий, но мне это не удалось.
Поэтому мне нужно знать, как это сделать через Python. Я сделал это с помощью PowerShell, благодаря которому я могу успешно установить общий принтер на своем локальном компьютере в контексте текущего пользователя, вошедшего в систему, а не пользователя, запускающего сценарий, как указано ниже:
$computerName = "PC Name"
# Function to get the logged-on user
function Get-LoggedOnUser {
param (
[string]$computerName
)
Get-WmiObject -Class Win32_ComputerSystem -ComputerName $computerName | Select-Object -ExpandProperty UserName
}
# Function to get the user's SID
function Get-UserSid {
param (
[string]$domain,
[string]$username,
[string]$computerName
)
Get-WmiObject -Class Win32_UserAccount -Filter "Domain='$domain' AND Name='$username'" -ComputerName $computerName | Select-Object -ExpandProperty SID
}
# Function to install the printer for the currently logged-on user
function Install-PrinterForUser {
param (
[string]$computerName,
[string]$printerPath
)
$loggedOnUser = Get-LoggedOnUser -computerName $computerName
if ($loggedOnUser) {
# Split the domain and username
$userParts = $loggedOnUser.Split('\')
$domain = $userParts[0]
$username = $userParts[1]
# Get the user's SID
$userSid = Get-UserSid -domain $domain -username $username -computerName $computerName
# Construct the command to run as the logged-on user
$arguments = "/in /n`"$printerPath`""
$psi = New-Object System.Diagnostics.ProcessStartInfo
$psi.FileName = "rundll32.exe"
$psi.Arguments = "printui.dll,PrintUIEntry $arguments"
$psi.UseShellExecute = $false
$psi.RedirectStandardError = $true
$psi.UserName = $username
$psi.Domain = $domain
# Prompt for the user's password
$securePassword = Read-Host -Prompt "Enter password for $loggedOnUser" -AsSecureString
$psi.Password = $securePassword
$process = [System.Diagnostics.Process]::Start($psi)
$process.WaitForExit()
if ($process.ExitCode -eq 0) {
Write-Output "Printer connected successfully."
} else {
Write-Error "Failed to connect to printer: $printerPath"
Write-Error $process.StandardError.ReadToEnd()
}
} else {
Write-Output "No user currently logged on."
}
}
# Main script execution
$printerPath = "Printer's Network Path"
Install-PrinterForUser -computerName $computerName -printerPath $printerPath
Подробнее здесь: https://stackoverflow.com/questions/787 ... ed-on-user