我正在使用下面的powershell脚本循环通过列表中的服务器执行特定的任务取决于服务器的主机名。在下面的脚本中,如果$ server ='server1'我想执行与其他服务器不同的一组任务,但是这个循环直接执行'else'循环。我在这里错过了什么?PowerShell逻辑为每个循环
$servernames = @("server1", "server2", "server3")
$user = '**********'
$Password = '*******'
$SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $user, $SecurePassword
foreach($server in $servernames)
{
Invoke-Command -ComputerName $server -Credential $cred -ScriptBlock {
if ($server -eq 'server1')
{
#do some task on server1
}
else
{
#do tasks for remaining servers
}
}
if ($error) { exit 1 }
}
感谢您提供的所有建议;除此之外,我还需要使用invoke-command在列表中的所有服务器上执行解压缩函数。有没有更好的方法可以做,而不是在每个服务器的invoke-command循环中声明unzip函数? 添加型-AssemblyName System.IO.Compression.FileSystem 功能解压 { 参数([字符串] $压缩文件,[字符串] $ outpath中) [System.IO.Compression.ZipFile] :: ExtractToDirectory($ zipfile,$ outpath) } – workholic
@workholic不,您需要以某种方式在远程会话中声明函数。远程会话与本地会话完全不同。唯一传递给它的是你明确传递给它的东西。 –