我正在创建一个脚本来检查远程桌面连接的详细信息。
$ts = get-WMIObject Win32_TerminalServiceSetting -computername $s -Namespace ROOT\CIMV2\TerminalServices
使用上述脚本,我可以检查 RDP 是否已启用。但我需要检查 RDP 中使用的端口号。
我知道 3389 正在被使用,但在我的环境中,一些服务器的 RDP 在其他端口上配置。
我需要获取端口号。我检查了 ROOT\CIMV2\TerminalServices WMI 类,但没有找到端口号详细信息。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
在这个位置我可以看到有一个 dword (端口号) 包含端口号详细信息。
我们能否通过其他方式检查,因为通过检查注册表,我们需要启动远程注册表服务正在运行,但我担心有时它们会停止而我们无法运行它。
答案1
我不确定远程注册表,通常启动 WinRM 就足够了。您可以结合使用 Invoke-Command 和 Get-itemProperty 来检查端口号。
Invoke-Command -HideComputerName computer_machine { Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Termin*Server\WinStations\RDP*CP\ -Name PortNumber | select PortNumber}
答案2
如果您使用的是 Windows 10 和 Windows Server 2012,我发现了了解端口号的最简单方法。
get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\'-name portnumber
答案3
享受 psremoting 模块带来的乐趣 http://psremoteregistry.codeplex.com/
Import-Module PSRemoteRegistry
$computers="server2","server3"
Foreach($computer in $computers){
get-regdword -Computer $computer -Hive LocalMachine -Key 'SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Value PortNumber |select computername,data
}
答案4
无需任何工具的最佳方法
$computers="computer1","Computer2"
$result=Foreach ($Computer in $Computers)
{
$RegBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$Computer)
$Reg=$RegBase.OpenSubKey(‘SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp’).GetValue(‘PortNumber’)
New-Object -TypeName PSCustomObject -Property @{
ComputerName = $Computer
Port=$reg
}
}
$result|select computername,port