以下のコードでは、ステートメント内のforeach
ループを反復するために変数$scripts
を使用していました。しかし、$script
の値が正しく置き換えられず、結果が "count.sql size.sql"という単一の文字列であるようです。 foreach
ループがInvoke-Command
ループの外側で定義されている場合は、ループが正しく実行されています。PowerShellのInvoke-Commandの内部でforeachループを使用するには?
foreach
内部にループを定義する方法はありますかInvoke-Command
?
$scripts = @("count.sql", "size.sql")
$user = ""
$Password = ""
$SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $User, $SecurePassword
foreach ($server in $servers) {
Invoke-Command -ComputerName $Server -Credential $cred -ScriptBlock {
Param($server, $InputFile, $scripts, $url)
foreach ($script in $scripts) {
echo "$script"
} -ArgumentList "$server,"$scripts","$url"
}
このスクリプト:
別の方法としては、
using
scope modifierを経由してスクリプトブロックの外部からの変数を使用することができます。あなたはあなたの引数リストのようにあなたの編集が間違っているように見えるので、サーバのvarablesを正しく – ArcSetと呼んでいるようではありません。引数リストを -ArgumentList $ server、$ scripts、$ url に変更してください。すべてのarugmentsを順番に宣言していません....サーバ、入力ファイル、スクリプト、URL。現在は$ Scripts =〜$ inputfileです。 – ArcSet
'-argumentList'パラメータも間違って配置されているように見えますが、現在はスクリプトブロック内にあります。 – andyb