使用powershell运行mstsc.exe
我想做的事情似乎很简单,但我想不出来。我希望运行Powershell脚本来启动RDP会话,将文件复制到c:\目录,然后从命令行运行该文件。我希望它循环,从csv文件中获取参数,例如服务器IP、用户名和密码。所以本质上,步骤如下使用powershell运行mstsc.exe,powershell,cmd,command-line-interface,rdp,mstsc,Powershell,Cmd,Command Line Interface,Rdp,Mstsc,我想做的事情似乎很简单,但我想不出来。我希望运行Powershell脚本来启动RDP会话,将文件复制到c:\目录,然后从命令行运行该文件。我希望它循环,从csv文件中获取参数,例如服务器IP、用户名和密码。所以本质上,步骤如下 1.import infor from the csv file to define variables 2.copy specefied file (then loop) 3.launch mstsc.exe 4.enter server IP, usernam
1.import infor from the csv file to define variables
2.copy specefied file (then loop)
3.launch mstsc.exe
4.enter server IP, username, password
5.paste copied file into the c:\ directory
6.launch cmd.exe
7.Run the file that was copied to the c:\ directory
8.log off server
我想看看是否有人能帮我解决这个问题。我是power shell的新手,并且已经完成了很多工作。如果有人能给我指出正确的方向,甚至提供代码来填补空白,我会非常感激
更具体地说,我要做的是在机器上安装一个代理。这个过程需要通过rdp登录到服务器,从命令行运行静默安装(msi)包。我想做的是向我的客户提供一个电子表格,让他填写详细信息,如服务器地址、用户名和密码。I和csv,运行powershell,并通过该脚本安装许多代理,本质上是一种自动化过程。希望这能解释得更清楚一点
这是我到目前为止所拥有的
窗户
$computers= gc "C:\Users\Desktop\Powershell\DeviceList.txt"
foreach ($computername in $computers)
{
mstsc
Start-Sleep -s 2
[System.Windows.Forms.SendKeys]::SendWait("$computername{ENTER}")
这只会启动mstsc会话,所以这只是难题的一部分,然后我需要做的是将文件复制到该设备,然后运行cmd.exe和单个命令并注销
对于UNIX>>>
$computers= gc "C:\Users\Desktop\Powershell\DeviceList.txt"
foreach ($computername in $computers)
{
c:\putty.exe
Start-Sleep -s 2
[System.Windows.Forms.SendKeys]::SendWait("$computername{ENTER}")
}
基本上是一样的,但我可以直接从putty运行命令来实现这一点,而不必复制文件,因为我可以通过运行一些命令以另一种方式获得它
感谢您的帮助和建议。看来您选择了错误的方式。PowerShell具有强大的远程功能,因此,如果您的所有客户端都具有Windows管理(它包含在Vista 7和8的默认软件包中),您可以尝试以下操作:
# Comma separated list:
$listRaw = @"
Computer,User,Password
computer1,"Domain\user1","passw1"
computer2,"Domain\user2","passw2 with spaces"
"@
# Parse CSV list
$list = $listRaw | ConvertFrom-CSV -Delimiter ','
# Iterate targets
foreach ($target in $list) {
Write-Host "Connecting to $($target.Computer) as $($target.User)"
# Creating credential from username and password
$SecurePassword = $target.Password | ConvertTo-SecureString -AsPlainText -Force
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $target.User, $SecurePassword
# Creating remote session to that computer
# Using given credentials
$session = New-PSSession -ComputerName $target.Computer -Credential $Credentials
# Invoking actions on that remote session
Invoke-Command -Session $session -ArgumentList $target.Computer -ScriptBlock {
Param($computerName)
# this code executes on remote computer
"Hello from $computerName"
}
}
请让我们知道它是否在您的环境中工作。mstsc使用mstsc-v$Computer以$Computer作为参数
可以通过cmdkey添加用户,您可以保存远程计算机的凭据。Putty下载页面中的PSSession和(可能)Plink.exe的组合将帮助您实现目标 新的PSSession和Enter-PSSession cmdlet将允许您对Windows目标使用远程PowerShell会话(假设启用了WinRM)。从那里你可以在你的目标上执行PShell命令
$session - New-PSSession -computerName [targetName/ip] -Credential (get-credential)
$session | Enter-PSSession
{ Execute Silent install }
Exit-PSSession
$session | Disconnect-PSSession
或者可以使用Invoke命令
Invoke-Command -ScriptBlock { install.exe /s } -computerName [target] -credential (Get-Credential)
对于Linux设备,您可能可以利用PLink.exe通过SSH运行远程脚本。我以前没试过,但应该可以用
此链接可能会有所帮助:我已经用目前为止的内容编辑了我的原始帖子。PSEXEC并没有像yunderstandings那样工作得很好,你不需要在我想要访问的所有设备上启用它吗?如果这样就不需要了,那么一旦我到达设备,我只需要复制一个文件到它,然后运行一个命令进行静默安装。有了mstsc,我就可以开始了,但我想不出一种方法来将命令输入到windows会话中。使用unix非常简单,我只使用putty和SendKeys功能,未经测试,但似乎可以工作。如果您的所有服务器上都安装了powershell 2,请选择WS-management:Setup:&use: