使用powershell运行mstsc.exe

使用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

我想做的事情似乎很简单,但我想不出来。我希望运行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, 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: