RDP 到具有特定用户名的服务器

RDP into server with specific username

我需要能够调用 exe 并仅指定服务器名和用户名。我仍然希望它像往常一样提示输入密码。当我调用下面的第一个命令时,RDP 会提示我输入密码,但它已经插入了我的本地用户名。如果我想使用其他人的用户名,我无法在第二个命令中使其正常工作。

Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList "/v:$server"

Start-Process "$env:windir\system32\mstsc.exe" -ArgumentList "/v:$server/IP:$username"

如何只传入服务器名和用户名?

mstsc.exe 没有 /username 参数。但是,它确实有一个 /prompt 参数,它会提示输入用户名和密码。否则,您需要使用 .rdp 连接文件。


更新:
您可以利用 cmdkey 预加载凭据,这样当您远程访问主机时 mstsc 不会提示您,然后使用 Read-Host 或 [=19= 等内置功能提示您输入凭据] 你自己。

示例函数:

function Connect-Host
{
    param
    (
        [Parameter(Position = 0, Mandatory)]
        [ValidateScript({Test-Connection -ComputerName $PSItem -Quiet})]
        [string]
        $ComputerName,

        [Parameter(Position = 1)]
        [System.Management.Automation.CredentialAttribute()]
        [pscredential]
        $Credential = (Get-Credential)
    )

    $cmdKeyArgs = @(
        "/generic:TERMSRV/$ComputerName"
        "/user:$($Credential.UserName)"
        "/pass:$($Credential.GetNetworkCredential().Password)"
    )
    $null = & "$Env:SystemRoot\System32\CMDKEY.exe" @cmdKeyArgs

    & "$Env:SystemRoot\System32\MSTSC.exe" /v:$ComputerName
}

可以对其进行修改,因此它不会在您每次 运行 时提示您,因为它将使用 cmdkey 缓存您的凭据。在 prompting/saving.

之前,可以使用其他逻辑来查询 cmdkey 您要连接的计算机

示例:

cmdkey /list |
    Select-String -Pattern $ComputerName -Context 2 |
    Select-Object -Property @(
         @{N='ComputerName';E={$ComputerName}}
         @{N='User';E={$PSItem.Context.PostContext[-1] -replace '\s*User:\s*'}}
    )