我期待做的事情似乎相当简单,但我无法弄明白。我希望运行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运行命令来完成这项工作而不必复制文件,因为我可以通过运行一些命令来获得另一种方式。
对此有任何帮助或想法,感谢。
答案 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