以下のpowershellスクリプトを使用してリスト内のサーバーをループし、サーバーのホスト名に応じて特定のタスクを実行しました。以下のスクリプトでは、$ server = 'server1'の場合、他のサーバーとは違って別のタスクを実行したいのですが、このループは 'else'ループを直接実行しています。私はここに何かを逃していますか? $Server
が呼び出しコマンドのスクリプトブロックの内部にあるのでpowershell for-eachループのロジック
$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を使ってリスト内のすべてのサーバ上で実行する必要のあるunzip関数を持っていました。各サーバのinvoke-commandループ内でunzip関数を宣言するのではなく、より良い方法がありますか? 追加型-AssemblyName System.IO.Compression.FileSystemを 機能解凍 {PARAM([文字列] $ zipファイル、[文字列]の$ OUTPATH) [System.IO.Compression.ZipFile] :: ExtractToDirectory($ zipfile、$ outpath) } – workholic
@workholicいいえ、何とかリモートセッションで関数を宣言する必要があります。リモートセッションは、ローカルセッションとはまったく異なります。それに渡す唯一のものは、明示的に渡すものです。 –