我需要你的帮助。
我需要编写一个来自Windows服务器的脚本, 将连接到服务器列表(由具有IP地址的csv提供) 在这些服务器上将覆盖位于其上的文件 C:\ Program Files(x86)\ Folder1或C:\ Program Files \ Folder1 从服务器获取正确的版本从D:\运行脚本 然后重新启动名为sname1的服务。
(我们可以假设所有目标服务器都具有WinRM Active) 你的帮助会受到极大的关注。
到目前为止,我所拥有的是这一点,但我不确定这是正确的,因为我使用的是IP地址而不是主机名(主机名不是我的选项&#? 39; m在域环境中不使用它)
Common
答案 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 JumpStart和Advanced Tools & Scripting,因为他们解释了很多这些东西,让你养成良好的习惯,实际上很有趣。