2016-11-16 56 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數組。看來,出於某種原因,PowerShell是治療for循環,因爲它是自己的說法,而不是一個bash的一個,從而導致錯誤的一切:

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將不執行這些類型的語句因爲它是自己的?或者,也許是另一種方法?

+0

'-Command'想'串'而不是'ScriptBlock'。是的,'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