使用PowerShell远程批量覆盖文件并重新启动某个服务

时间:2015-12-22 12:09:32

标签: powershell scripting

我需要你的帮助。

我需要编写一个来自Windows服务器的脚本, 将连接到服务器列表(由具有IP地址的csv提供) 在这些服务器上将覆盖位于其上的文件 C:\ Program Files(x86)\ Folder1或C:\ Program Files \ Folder1 从服务器获取正确的版本从D:\运行脚本 然后重新启动名为sname1的服务。

(我们可以假设所有目标服务器都具有WinRM Active) 你的帮助会受到极大的关注。

到目前为止,我所拥有的是这一点,但我不确定这是正确的,因为我使用的是IP地址而不是主机名(主机名不是我的选项&#? 39; m在域环境中不使用它)

Common

1 个答案:

答案 0 :(得分:0)

REF:

$servers=Import-Csv E:\Temp\serverlist.csv
$Source = "D:\file1.ini"
foreach ($server in $servers)
  {
    $Password  = ConvertTo-SecureString -AsPlainText -Force -String "$server.Password"
    $User = "$server.Domain\$server.Usernaem"
    $credentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user,$password
    if (Test-Path "\\$server.Alias\c$\Program Files\Folder1")
    {
        $Destination = "\\$server.Alias\c$\Program Files\Folder1"
    }
    if (Test-Path "\\$server.Alias\c$\Program Files (x86)\Folder1")
    {
        $Destination = "\\$server.Alias\c$\Program Files (x86)\Folder1"
    }
    Copy-Item $Source -Destination $Destination -Credential $credentials -Force
    Restart-Service -InputObject $(Get-Service -Computer $server,Alias -Name sname1)
  }

请注意,如果将其括在引号中,则无法访问变量的属性或方法。例如,如果你说;

$test = 1234
Write-Output "House $test.ToString()"

您将获得输出“House 1234.ToString()”,因为该方法未解析,它只是假设它是一个字符串。您需要将其拆分或包含它:

Write-Output ("House " + $test.ToString())
Write-Output "House $($test.ToString())"

此外,您在声明$User时拼错了UserName。解决这些问题,它应该可以正常工作。

我建议查看微软的MVA PowerShell 3.0 JumpStartAdvanced Tools & Scripting,因为他们解释了很多这些东西,让你养成良好的习惯,实际上很有趣。