我正在编写一个脚本,该脚本需要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,然后通过管道将命令传递给它,以便在该计算机上执行它们吗?
答案 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"')
但是,使用此方法,您无法传递凭据。