我可以通过mstsc RDP并在该远程桌面上运行脚本吗?

时间:2018-07-11 19:50:07

标签: powershell powershell-v3.0 remote-access rdp

我正在编写一个脚本,该脚本需要RDP到几个服务器,在那里进行处理,然后再返回。

mstsc /v:<computer>本身看起来很棒,因为它的安全/凭据提示与您手动执行时相同。

但是,经过一些研究,它似乎是一个命令行实用程序,仅此而已,因为尝试了类似以下操作:

mstsc /v:104.209.198.181 | Invoke-Command -ScriptBlock {"New-Item C:\Users\<me>\Desktop\Success.txt -ItemType file"} 

不起作用。

因此,我尝试了Enter-PSSession <computer> -Credential $env:UserName,人们经常使用它,但是与mstsc相比,它看起来像是一团糟,因为它看起来很原始(我昨天读过的一篇文章试图说这种提示总是网络钓鱼诈骗,显然不是,但是尝试告诉管理人员),它不会自动填充域,并且我收到WinRM错误,我敢肯定这将是一个兔子洞。

那么可以使用mstsc来进行RDP,然后通过管道将命令传递给它,以便在该计算机上执行它们吗?

1 个答案:

答案 0 :(得分:2)

答案是否定的。您无法使用MSTSC.exe来启动某种管道。

但是,您可以使用PSRemoting来发送命令,就像您已经尝试做的那样:

Invoke-Command -ComputerName '<FQDN>' -ScriptBlock {
    New-Item -Path "$HOME\Desktop\Success.txt" -ItemType File
}

如果您不知道FQDN,则使用DNS查找IP:

[System.Net.Dns]::GetHostEntry('104.209.198.181')

所有这些都失败了。您可以依靠WMI,但不会收到任何控制台反馈:

$WmiArgs = @{
    'Class'        = 'Win32_Process'
    'Name'         = 'Create'
    'ArgumentList' = 'powershell -NoProfile -NonInteractive -WindowStyle Hidden -Command "New-Item -Path $HOME\Desktop\Success.txt -ItemType File"'
    'ComputerName' = '104.209.198.181'
}
Invoke-WmiMethod @WmiArgs

虽然我测试了上面的方法,但您仍然可以简化!

([wmiclass]'\\104.209.198.181\root\cimv2:win32_process').
    Create('powershell -NoP -NonI -W Hidden -C "New-Item -Path $HOME\Desktop\Success.txt -ItemType File"')

但是,使用此方法,您无法传递凭据。