2017-04-22 130 views
0

我正在與自動安裝在當前目錄的所有更新的腳本如下錯誤:錯誤PowerShell腳本

At K:\Operating System\ConfigureWindows10\Updates\Install-Updates.ps1:15 char:25 
+   $command = "Expand â€「F:* '" + $msu.fullname + "' '" + $PSScr ... 
+        ~~~ 
Unexpected token 'F:*' in expression or statement. 
At K:\Operating System\ConfigureWindows10\Updates\Install-Updates.ps1:29 char:82 
+ ... = "Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase" 
+                   ~ 
The string is missing the terminator: ". 
At K:\Operating System\ConfigureWindows10\Updates\Install-Updates.ps1:13 char:5 
+  { 
+  ~ 
Missing closing '}' in statement block or type definition. 
At K:\Operating System\ConfigureWindows10\Updates\Install-Updates.ps1:10 char:1 
+ { 
+ ~ 
Missing closing '}' in statement block or type definition. 
    + CategoryInfo   : ParserError: (:) [], ParseException 
    + FullyQualifiedErrorId : UnexpectedToken 

這裏是代碼體:

{ 
$msu = get-childitem -path $PSScriptRoot -Recurse | where ($_.extension -eq ".msu") | select fullname 
foreach($package in $msu) 
{ 
    write-debug $msu.fullname 
    $command = "Expand –F:* '" + $msu.fullname + "' '" + $PSScriptRoot + "'" 
    write-debug $command 
    Invoke-Expression $command 
} 

$updates = get-childitem -path $PSScriptRoot -Recurse | where ($_.extension -eq ".cab") | select fullname 
foreach($update in $updates) 
{ 
    write-debug $update.fullname 
    $command = "dism /online /add-package /packagepath:'" + $update.fullname + "'" 
    write-debug $command 
    Invoke-Expression $command 
} 

$command = "Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase" 
Invoke-Expression $command 
} 
+0

當保存腳本文件因爲UTF-8使用帶** BOM **的UTF-8。 – PetSerAl

+0

謝謝。該腳本正常工作,但我收到另一個錯誤。該腳本不會擴展目錄中的任何msu文件。 –

+0

代碼更新: –

回答

1

後「其中」你需要一個腳本塊,通常花括號,而不是簡單的腳本塊。

...| where {$_.extension -eq ".msu"} |... 
+0

更改()爲{}確實可行,但該腳本僅執行Dism.exe/online/Cleanup-Image/StartComponentCleanup/ResetBase。沒有別的被執行。 –

+0

在循環中:foreach($ package in $ msu){...}您使用的$ msu.fullname不好,您應該使用$ package.fullname來代替。 – placa

0
  • 使用var $ MSU而不是$包在第一的foreach。
  • 除了where子句中的大括號外,您可以省略它 在Get-ChildItem中指定-Filter *.msu參數。
  • IMO的選擇是沒有必要的
  • 的報價看起來不正確,請使用此字符串,而不是

試試這個(未經測試)

{ 
    $msu = get-childitem -path $PSScriptRoot -Recurse -Filter *.msu 
    foreach($package in $msu){ 
     write-debug $package.FullName 
$command = @' 
& Expand.exe –F:* "$package.FullName" "$PSScriptRoot" 
'@ 
     write-debug $command 
     Invoke-Expression $command 
    } 
    $updates = get-childitem -path $PSScriptRoot -Recurse -Filer *.cab 
    foreach($update in $updates){ 
     write-debug $update.fullname 
$command = @' 
& Dism.exe /online /add-package /packagepath:"$update.FullFame" 
'@ 
     write-debug $command 
     Invoke-Expression $command 
    } 
    $command = "Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase" 
    Invoke-Expression $command 
} 
+0

在K:\ OperatingSystem \ ConfigureWindows10 \ Updates \ Extract-Updates.ps1:8 char:5 +'@ + ~~ 在字符串終止符之前不允許有空格。 在K:\ OperatingSystem \ ConfigureWindows10 \ Updates \ Extract-Updates.ps1:4 char:1 + { +〜 在語句塊或類型定義中缺少關閉'}'。 在K:\ OperatingSystem \ ConfigureWindows10 \ Updates \ Extract-Updates.ps1:1 char:1 + { +〜 在語句塊或類型定義中缺少關閉'}'。 + CategoryInfo:ParserError:(:) [],ParseException + FullyQualifiedErrorId:WhitespaceBeforeHereStringFooter –

+0

錯誤。請幫忙。 –

+0

更改上面的腳本,使用這裏的字符串刪除縮進。 – LotPings