0
該片段(Get-Content $_.FullName | Select-Object -First 1)
被稱爲三次。目的是宣稱它是避免代碼重複的一個變量。如何將包含變量的片段聲明爲變量以避免使用PowerShell進行代碼複製?
Get-ChildItem "$env:ChocolateyInstall\lib\eclipse.*" -Recurse -Filter "eclipseInstall.zip.txt" |
ForEach-Object{ if (((Get-Content $_.FullName | Select-Object -First 1) -match "eclipse") -and (Test-Path -Path (Get-Content $_.FullName | Select-Object -First 1))){Remove-Item -Recurse -Force (Get-Content $_.FullName | Select-Object -First 1)}}
嘗試
$a = (Get-Content $_.FullName | Select-Object -First 1)
Get-ChildItem "$env:ChocolateyInstall\lib\eclipse.*" -Recurse -Filter "eclipseInstall.zip.txt" |
ForEach-Object{ if (($a -match "eclipse") -and (Test-Path -Path (Get-Content $_.FullName | Select-Object -First 1))){Write-Host "hello"}}
結果
PS C:\Windows\system32> . "C:\temp\powershelltest\test.ps1"
Get-Content : Cannot bind argument to parameter 'Path' because it is null.
At C:\temp\powershelltest\test.ps1:1 char:19
+ $a = (Get-Content $_.FullName | Select-Object -First 1)
+ ~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Get-Content], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.GetContentC
ommand
這並不清楚你究竟在做什麼。你能編輯問題並解釋嗎?這個錯誤是因爲你試圖訪問不存在的'$ _',因爲你還沒有創建管道。 – arco444 2014-12-01 15:40:55
@ arco444我正在嘗試避免代碼重複。同樣的片段,即'(Get-Content $ _ FullName | Select-Object-First 1)'此時被調用三次。問題已更新。 – 030 2014-12-01 15:43:26
好的,但_why_?腳本的實際目的是什麼?您正在分配,但您要分配的內容不正確。即使用'$ a =(..)'是好的,但是你不能直接執行'Get-Content $ _.Fullname'而不先進行管道連接。 – arco444 2014-12-01 15:47:40