使用powershell运行mstsc.exe

时间:2012-06-21 01:12:56

标签: 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, 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)软件包就可以了。我想做的是向我的客户提供一个电子表格,让他填写详细信息,例如服务器地址,用户名和密码。我转向csv,运行powershell,并通过该脚本安装许多代理,实质上是一种自动化过程。希望能更好地解释它。

这是我到目前为止所拥有的......

...的Windows

$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运行命令来完成这项工作而不必复制文件,因为我可以通过运行一些命令来获得另一种方式。

对此有任何帮助或想法,感谢。

3 个答案:

答案 0 :(得分:0)

我看起来你选择了错误的方式。 PowerShell具有出色的远程功能,因此如果您的所有客户端都拥有Windows Management(包含在Vista,Seven和Eight中的默认包中),您可以尝试以下操作:

# 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"
    }
}

如果它适用于您的环境,请告诉我们。

答案 1 :(得分:0)

mstsc使用mstsc -v $ Computer将$ Computer作为参数 添加用户可以通过cmdkey完成,您可以保存远程计算机的凭据

答案 2 :(得分:0)

来自Putty的下载页面的PSSession和(可能)Plink.exe的组合应该可以帮助您实现目标。

New-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-Command

Invoke-Command -ScriptBlock { install.exe /s } -computerName [target] -credential (Get-Credential)

对于Linux机器,您可以利用PLink.exe通过SSH运行远程脚本。不是我以前尝试过的东西,但它应该可以正常工作。

此链接可能会有所帮助:http://the.earth.li/~sgtatham/putty/0.53b/htmldoc/Chapter7.html