如何在服务器上为所有当前登录用户运行指定PowerShell命令
给服务器所有当前登录用户运行指定PowerShell命令的方法
要让指定的PowerShell命令在服务器所有当前登录用户的会话中执行,可通过以下几种实现方式:
方法一:利用quser提取会话ID执行命令
- 先获取所有活跃登录用户的会话信息:
$userSessions = quser | Select-Object -Skip 1 | ForEach-Object { $fields = $_ -split '\s+' | Where-Object { $_ -ne '' } [PSCustomObject]@{ Username = $fields[0] SessionId = $fields[2] State = $fields[3] } } | Where-Object { $_.State -eq 'Active' }
- 遍历每个活跃会话,运行目标命令:
foreach ($session in $userSessions) { Start-Process powershell.exe -ArgumentList "-sta -file 'E:\Script-Popup\Popup-Message - Done.ps1'" -SessionId $session.SessionId }
方法二:通过CIM实例获取会话并创建进程
直接调用系统CIM对象来定位用户会话并启动进程:
# 获取本地交互式(LogonType=2)和远程桌面(LogonType=10)的活跃会话 $userSessions = Get-CimInstance Win32_LogonSession | Where-Object { $_.LogonType -in 2,10 } foreach ($session in $userSessions) { Invoke-CimMethod -ClassName Win32_Process -MethodName Create -Arguments @{ CommandLine = "powershell.exe -sta -file 'E:\Script-Popup\Popup-Message - Done.ps1'" SessionId = $session.LogonId } }
注意事项
- 必须以管理员权限运行PowerShell,否则无权限跨用户会话执行操作
- 确保目标脚本路径
E:\Script-Popup\Popup-Message - Done.ps1在服务器上存在,且所有登录用户拥有读取该文件的权限 - 上述方法兼容本地交互式登录和远程桌面(RDP)登录的用户会话
内容的提问来源于stack exchange,提问作者vfdsabvdasvd
相关产品推荐
相关产品推荐

