$users = quser
foreach ( $user in $users) {
if ($user -like"*Disc*") {
logoff $user.substring(40,6).Trim() } }
Logoff disconnected users on Remote Desktop Server with Powershell
1
$users = quser
foreach ( $user in $users) {
if ($user -like"*Disc*") {
logoff $user.substring(40,6).Trim() } }
function Test-Port($hostname, $port)
{
# This works no matter in which form we get $host - hostname or ip address
try {
$ip = [System.Net.Dns]::GetHostAddresses($hostname) |
select-object IPAddressToString -expandproperty IPAddressToString
if($ip.GetType().Name -eq "Object[]")
{
#If we have several ip's for that address, let's take first one
$ip = $ip[0]
}
} catch {
Write-Host "Possibly $hostname is wrong hostname or IP"
return
}
$t = New-Object Net.Sockets.TcpClient
# We use Try\Catch to remove exception info from console if we can't connect
try
{
$t.Connect($ip,$port)
} catch {}
if($t.Connected)
{
$t.Close()
$true
}
else
{
$false
}
}
FOR /F "usebackq" %%i IN (`hostname`) DO SET HOST=%%i ECHO %HOST%
$ADgroup = "testgroup"
Get-ADGroupMember $ADgroup | ForEach-Object {Remove-ADGroupMember $ADgroup $_ -Confirm:$false}
param ($servername)
$ignorelist = "MapsBroker","RemoteRegistry","sppsvc","WbioSrvc","BITS","ShellHWDetection","TrustedInstaller"
if ($servername.length -lt 2) { $Servername = Read-Host -Prompt 'Input the servername' }
# Check for name is IP
$checkIP = [bool]($servername -as [ipaddress])
# Check DNS resolve
if (!($checkIP)) {
$DNScheck = Resolve-DnsName $servername -ErrorAction SilentlyContinue
if ($DNScheck.length -lt 1) {
Write-host "Unable to resolve DNS name" -ForegroundColor Red
Exit 1}
}
Invoke-Command -ComputerName $servername -ArgumentList $ignorelist -ScriptBlock { $NotRunningServices = Get-Service | Where-Object { $_.Starttype -like "Automatic*" -and $_.status -notlike "Running" }
foreach ($NotRunningService in $NotRunningServices) {
if (!($args.Contains($NotRunningService.name))) {
Start-service $NotRunningService.name -ErrorAction SilentlyContinue
sleep -Milliseconds 500
if ((Get-service -Name $NotRunningService.name).status.value__ -ne 4 ) { Write-host "Failed to start" $NotRunningService.name -ForegroundColor Red }
else { Write-host "Succeded starting" $NotRunningService.name -ForegroundColor Green }
}
} }
while (!(Get-ADgroup -Filter { Name -like "the_AD_object"}))
{
write-host wait
start-sleep -m 1000
}
#Allow remote powershell
Enable-PSRemoting -Force
Enable-WSManCredSSP -Role Server -Force
Get-Service winrm | Start-Service
Enable-WSManCredSSP -Role Client -DelegateComputer * -Force
Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\Credssp\PolicyDefaults\AllowFreshCredentials -Name WSMan -Value WSMAN/*
Set-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\Credssp\PolicyDefaults\AllowFreshCredentialsDomain -Name WSMan -Value WSMAN/*
#Test from an other machine:
Invoke-Command -ComputerName Remote-Server -ScriptBlock {Get-host}
#Allow crossdomain:
#On remote server do the above and:
New-Itemproperty -name LocalAccountTokenFilterPolicy -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -propertyType DWord -value 1
#On remote and local machine run:
Set-item wsman:localhost\client\trustedhosts -value 'server1,server2,server3'
#Test from an other machine:
$credential = Get-Credential
Invoke-Command -ComputerName RM-SERVER -ScriptBlock {Get-Process} -Credential $credential
Event Viewer
Filter System log for event id: 1074