PowerShellからLinuxマシンに接続する必要があります。名前に一致するフォルダをいくつか取得してから削除します(なぜ、テスト環境のクリーンアップを要求するのか)。PowerShellスクリプト内でbashコードシーケンスをエスケープする
これを達成するために、私はSSH.NETライブラリを使用しています(詳細here)と私のスクリプトは、これまでのようになります。私はループに必要な場所私はポイントに到達するまで
New-SshSession -ComputerName UbuntuMachine -Username root -Password test1234
Invoke-SshCommand -InvokeOnAll -Command {\
cd /dev;\
shopt -s nullglob;\
backupsToDelete=(Nostalgia*);\
printf "%s\n" "${backupsToDelete[@]}";\
for i in "${backupsToDelete[@]}"\
do\
printf $i\
done}
すべてが正常に動作します私のbackupsToDelete
配列を通して。
At C:\Users\Administrator\Desktop\CleanupLinux.ps1:7 char:6
+ for i in "${backupsToDelete[@]}"\
+ ~
Missing opening '(' after keyword 'for'.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : MissingOpenParenthesisAfterKeyword
文のこれらの種類を実行しないようにPowerShellを伝えるためにどのような方法があります:いくつかの理由で、PowerShellは、エラーが生じ、すべてをそれ自身の声明ではなくbashの1だとしてfor
ループを扱っているようですそれは自分のものですか?それとも別のアプローチですか?
'-Command'は' ScriptBlock'ではなく 'string'を必要とします。はい、 'ScriptBlock'は自動的に' string'に変換できますが、まずそれをPowerShellの構文ルールを使って解析する必要があります。 – PetSerAl