Я хочу создать сценарий PowerShell, который будет видеть, зарегистрирована ли локальная учетная запись пользователя на удаленной машине. Если это так, он выведет сообщение о том, что пользователь вошел в систему. Если пользователь не вошел в систему, он откроет mstsc, чтобы пользователь мог войти в систему.
Приведенный ниже код, который я нашел, отлично работает, но, похоже, он видит только учетные записи домена. И оттуда я не уверен, как передавать результаты и отвечать в зависимости от того, вошел ли пользователь в систему или нет.
@(Get-WmiObject -ComputerName $machine -Namespace root\cimv2 -Class Win32_ComputerSystem)[0].UserName;
Обновленный код. В основном мне нужно увидеть, используется ли локальная учетная запись пользователя сеансом RDP. Имеет ли это смысл?
$machine = "ServerNameHere"
$temp1 = "C:\temp\user.txt"
$Word = "JDoe"
# The below command will connect to the server and see if user bouair is currently logged in
@(Get-WmiObject -ComputerName $machine -Namespace root\cimv2 -Class Win32_ComputerSystem)[0].UserName | Out-File $temp1 -Append
If((Get-Content $temp1).Contains($Word))
{
[system.windows.forms.messagebox]::Show("another user is already logged in!");
}
else {
.\mstsc.exe -v $machine
}
Remove-Item $temp1
exit
Одна из моих проблем с командой Get-WmiObject заключалась в том, что она не загружала сеансы RDP на моем сервере. Затем я наткнулся на блог, где пользователи использовали quser для получения всех пользователей, затем я изменил код, чтобы он работал в моей среде. этот код отлично работает для нашей группы, и другие могут извлечь из него пользу. следующий шаг — вытащить время простоя и состояние в блок сообщений, но это на другой день.
param( $ComputerName = 'ServerNameNere' )
process {
$File1 = "C:\temp\user.txt"
$word = "UserNameHere"
Remove-Item $File1
foreach ($Computer in $ComputerName) {
quser /server:$Computer | Select-Object -Skip 1 | ForEach-Object {
$CurrentLine = $_.Trim() -Replace '\s+',' ' -Split '\s'
$HashProps = @{
UserName = $CurrentLine[0] | Out-File $file1 -Append
ComputerName = $Computer | Out-File $file1 -Append
}
if ($CurrentLine[2] -eq 'Disc') {
$HashProps.SessionName = $null | Out-File $file1 -Append
$HashProps.Id = $CurrentLine[1] | Out-File $file1 -Append
$HashProps.State = $CurrentLine[2] | Out-File $file1 -Append
$HashProps.IdleTime = $CurrentLine[3] | Out-File $file1 -Append
$HashProps.LogonTime = $CurrentLine[4..6] -join ' ' | Out-File $file1 -Append
}
else {
$HashProps.SessionName = $CurrentLine[1] | Out-File $file1 -Append
$HashProps.Id = $CurrentLine[2] | Out-File $file1 -Append
$HashProps.State = $CurrentLine[3] | Out-File $file1 -Append
$HashProps.IdleTime = $CurrentLine[4] | Out-File $file1 -Append
$HashProps.LogonTime = $CurrentLine[5..7] -join ' ' | Out-File $file1 -Append
}
New-Object -TypeName PSCustomObject -Property $HashProps |
Select-Object -Property UserName,ComputerName,SessionName,Id,State,IdleTime,LogonTime
}
}
If((Get-Content $file1).Contains($Word))
{
[system.windows.forms.messagebox]::Show("another user is already logged in!");
}
else {
mstsc.exe -v $machine
}
}