[英]Quser with New-Object (Powershell)
我的团队目前正在将 DHCP 迁移到新的 Azure 服务器,当我们切换特定的 scope 时,我们会在重新启动之前手动检查是否有任何用户登录到租用 IP 内的桌面。
我拼凑了 2 个脚本来帮助自动检查登录用户。 第一个成功检索特定 scope 中租用 IP 的主机名,然后将它们导出到 txt。
第二个使用自定义 object 中的quser
命令从脚本 1 的结果中查询主机,这就是我遇到的麻烦。 我以为我会使用New-object
来检索用户,但与为每个有问题的服务器手动运行quser
命令相比,结果看起来不正确或似乎缺少数据。
本质上,我正在寻找一种更好的方法来检索登录用户,结果显示服务器名称,如果用户登录,用户名是什么(与运行 quser 命令相同的信息)。
Function Get-File($initialDirectory) {
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = $initialDirectory
$OpenFileDialog.filter = "All files (*.*)| *.*"
$OpenFileDialog.ShowDialog() | Out-Null
$OpenFileDialog.filename
}
$scopeservers = Get-File
$servers = Get-Content $scopeservers
foreach ($server in $servers) {$properties = @{
Server = $server
LoggedInUsers = quser /server:$server
}
$o = New-Object psobject -Property $properties; $o
}
或者,我尝试使用Get-CimInstance
或Get-WmiObject
,但我得到的只是这些命令的“RPC SErver Unavailable”错误。
任何帮助是极大的赞赏。
能够使用Invoke-Command
在远程计算机上运行脚本块来登录用户。
foreach ($server in $servers) {Invoke-Command -ComputerName $server -ScriptBlock {$env:COMPUTERNAME; quser}
write-host " "}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.