Скрипт для отключения RDP - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь отключить RDP с помощью powershell.

Я попробовал следующий код, но значения в имени машины, которое я перечисляю, не меняются.

$file = Get-Content c:\PSscripts\regchange\computers.txt
foreach ($computername in $file){
    $PingStatus = Gwmi Win32_PingStatus -Filter "Address = '$computername'" | Select-Object StatusCode
    If ($PingStatus.StatusCode -eq 0){
        $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computername )
        $regKey= $reg.OpenSubKey("System\\CurrentControlSet\\Control\\Terminal Server" ,$true)
        $regKey.SetValue("fDenyTSConnections","1",[Microsoft.Win32.RegistryValueKind]::dword)
    }
    else {
        Write-Host "$computername unreachable"
    }
}

Я подозреваю, что что-то не так с тем, как я ввел путь к реестру. любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Проблема должна быть либо в разрешениях (которые, как я полагаю, у вас есть, поскольку нет явных сообщений об ошибках), в обновлении проблемы или в Get-Content и структуре вашего файла.

Для того, чтобы Get-Content работал таким образом, каждый компьютер на отдельной строке. e.g.:

MyComputer1
MyComputer2

Еще один шаг устранения неполадок - попробуйте добавить в Write-Host $computername записи, чтобы убедиться, что вы проходите правильно .:

$file = Get-Content c:\PSscripts\regchange\computers.txt
foreach ($computername in $file){
     $PingStatus = Gwmi Win32_PingStatus -Filter "Address = '$computername'" | Select-Object StatusCode
     If ($PingStatus.StatusCode -eq 0){
         Write-Host "$computername set"
     }
    else {
        Write-Host "$computername unreachable"
    }
}

Вы также можете подтвердить, добавив $regKey.GetValue после установки:

$file = Get-Content c:\PSscripts\regchange\computers.txt
foreach ($computername in $file){
    $PingStatus = Gwmi Win32_PingStatus -Filter "Address = '$computername'" | Select-Object StatusCode
    If ($PingStatus.StatusCode -eq 0){
        $reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $computername )
        $regKey= $reg.OpenSubKey("System\\CurrentControlSet\\Control\\Terminal Server" ,$true)
        $regKey.SetValue("fDenyTSConnections","1",[Microsoft.Win32.RegistryValueKind]::dword)

        Write-Host "$computername set to: $($regKey.GetValue("fDenyTSConnections"))"

    }
    else {
        Write-Host "$computername unreachable"
    }
}

Вручную установив $computername = "MyComputer" и запустив код, я могу подтвердить, что код для настройки реестра работает ... Я также могу подтвердить, что удаленное уничтожение вашего доступа RDP к удаленной виртуальной рабочей станции также работает ... и ... так ужасно, как кажется; -)

1 голос
/ 04 июня 2019

Если PSRemoting включен, попробуйте что-то вроде этого ... (Это необходимо выполнить в сеансе администратора PowerShell с повышенными правами.)

Get-Content -Path 'c:\PSscripts\regchange\computers.txt' | 
ForEach{
    If (Test-Connection -$PSItem -Count 1 -Quiet)
    {
        $paramblock = @{
            Path = 'HKLM:\System\CurrentControlSet\Control\Terminal Server'
            Name = 'fDenyTSConnections'
            Value = '1'
        }

        Invoke-Command –Computername $PSItem –ScriptBlock {Set-ItemProperty @paramblock}
    }
    Else
    {Write-Warning -Message "Either the host $PSItem is offline or not reachable."}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...