2017-10-02 10 views
0

내 MDT 배포 공유에있는 모든 WIM 파일에 대한 보고서를 생성하려고합니다. 기본적으로 발견 된 모든 WIM 파일에 ForEach 루프를 수행해야한다고 생각합니다. 나는 내가해야한다고 생각하는 것을 가지고 있지만 분명히 그렇지 않다. 얼마나 멀리 떨어져 있니? Powershell For Each Loop Fail

$WimPath = "G:\DeploymentShare\Operating Systems" 

Get-ChildItem -Path $WimPath -Filter *.wim -Recurse -File | Select-Object -ExpandProperty VersionInfo | Select-Object FileName | ForEach-Object { Get-WindowsImage -ImagePath $_ } 

은 제가 보는 오류는 매개 변수가 Get-WindowsImage 명령에 대한 잘못된 것에 대해 잔소리를한다.

Get-WindowsImage : The parameter is incorrect. 
At line:3 char:147 
+ ... t-Object FileName | ForEach-Object { Get-WindowsImage -ImagePath $_ } 
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

내가 그것을해야한다고 생각처럼 Select-Object가 작동하지 않거나 내 Get-WindowsImage 명령에 올바르게 파이프 라인을 사용하지 않는 내 생각 해요.

+1

-Path $ WimPath -Filter *의 .wim -Recurse - 파일 - ChildItem을 얻기'시도 | ForEach-Object {Get-WindowsImage -ImagePath $ _. fullname}' – brendan62269

+1

@ Brendand62269 잘 했어! 나는'Select-Object'를 전혀 필요로하지 않을지 궁금합니다. 내 생각 엔 ... 당신을 정확하게 대답 한 사람으로 표시하려면 어떻게해야합니까? – RKillcrazy

답변

1

나는 PowerShell은 멍청한 놈이야 완전히 이것을 이해하지 않지만, 내가 먼저 명령이 부분에 초점을 맞춤으로써 설명 될 수 있는지에 대한 것입니다 생각 :

Get-ChildItem -Path $WimPath -Filter *.wim -Recurse -File | Select-Object -ExpandProperty VersionInfo | Select-Object FileName 

것은이를 얻으려면 지금까지 우리는 먼저 경로에 모든 *.wim 파일을 가져오고 VersionInfo 속성을 확장 한 다음 FileName을 선택합니다. 콘솔에서, 그건 당신이 같은 결과를 표시합니다 :

 
FileName 
-------- 
[files here] 

비결은 PowerShell을이 출력 당신을 말하고 무엇을 이해하는 것입니다. FileName 헤더를 보면 파이프 라인의 스트림이 이고 하나의 속성이 FileName 인 것을 의미합니다. 그런 다음 객체 스트림을 ForEach-Object으로 보내고 $_ 특수 변수를 봅니다.

지금 무슨 일이 벌어지고 있는지 명확히 알기를 바랍니다. Get-WindowsImage -ImagePath $_은 * .wim 파일의 경로를 포함하는 문자열 값을보고 싶어합니다. 그러나 우리는 하나의 속성을 가진 객체를 보냈습니다.

몇 가지 방법으로 해결할 수 있습니다 ... ExpandProperty을 두 번째 Select-Object에 추가하면 문제가 해결 될 수 있습니다. 하지만 거기에는 두 개의 Select-Object이 전혀 존재하지 않습니다. 난 그냥이 작업을 수행 할 수 있다고 생각 :

Get-ChildItem -Path $WimPath -Filter *.wim -Recurse -File | Select-Object -ExpandProperty FullName | ForEach-Object { Get-WindowsImage -ImagePath $_ } 

그리고 여기에 트릭은 반드시 객체의 모든 속성을 표시하지 않습니다 Get-ChildItem에서 쉘에 나타난 문자열 표현입니다. 공간이 없을 것입니다. 파일 이름은 항상 거기에 있었고, 그렇게처럼 Get-Member cmdlet를 선택하여 볼 수 있습니다

Get-ChildItem -Path $WimPath -Filter *.wim -Recurse -File | Get-Member 
+0

당신처럼, 나는 약간의 _noob_입니다. 'Get-WindowsImage' 명령에 필요한 ** 문자열 ** 값을 잘 잡으십시오. 이제부터 살펴 보았습니다. 설명서에는 정확히 필요한 부분이 나와 있습니다. 나는 Get-ChildItem -Path $ WimPath -Filter * .wim -Recurse -File | Select-Object -ExpandProperty VersionInfo | Select-Object FileName'과 _ 그것이 내가 필요한 것을 나에게주고 있다고 생각했다. 나는 그것이 어떤 종류의 데이터를 내게 주 었는지 완전히 이해하지 못했고 아직도 그것을 이해하는 방법을 완전히 이해하지 못하고있다. – RKillcrazy