2016-11-16 8 views
0

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ループを扱っているようですそれは自分のものですか?それとも別のアプローチですか?

+0

'-Command'は' ScriptBlock'ではなく 'string'を必要とします。はい、 'ScriptBlock'は自動的に' string'に変換できますが、まずそれをPowerShellの構文ルールを使って解析する必要があります。 – PetSerAl

答えて

0
$command = "@ 
{\ 
cd /dev;\ 
shopt -s nullglob;\ 
backupsToDelete=(Nostalgia*);\ 
printf "%s\n" "${backupsToDelete[@]}";\ 
for i in "${backupsToDelete[@]}"\ 
do\ 
    printf $i\ 
done} 
@" 

New-SshSession -ComputerName UbuntuMachine -Username root -Password test1234 
Invoke-SshCommand -InvokeOnAll -Command $command 

試してみてください。

+0

これはここのPowerShellであるはずですか? – PetSerAl

+0

ええ、それはまさにそれです。 – 4c74356b41

+1

デリミタとして '@" 'と' "@を使用します。 – PetSerAl

関連する問題