PowerShell v2에서 foreach-object 루프를 종료하는 데 문제가 있습니다. 텍스트 파일의 각 호스트에 대한 텍스트 파일 PowerShell v2에서 foreach 루프를 깨기
- 읽기 목록 Win32_Product와 (대한 필터를 얻을 : 내가 달성하기 위해 노력하고있어 작업의 거친 아이디어를 들어, 여기에 의사 코드입니다 제외 목록) 출력을 html로 변환하고 저장합니다.
스크립트의 이유는 표준 클라이언트 이미지에 포함 된 모든 응용 프로그램을 나열한 텍스트 파일을 얻었 기 때문에 정기적으로 다른 텍스트 파일에서 호스트를 검사하여 무단, 스케치 또는 그렇지 않으면 호스트 시스템에서 불필요한 응용 프로그램.
코드가 거친면에서 효과가 있지만 주요 문제는 수동 개입없이 스크립트가 종료되지 않는다는 것입니다. 여기에 누락 된 구성 요소가 일부 조건이 존재할 때까지 루프를 실행하는 것입니다 (즉, 호스트 파일의 첫 번째 줄이 두 번째로 발견됨). 그런 다음 스크립트를 종료합니다. 이것이 내가 상상 한 방법이지만, 나는 항상 다른 논리에 열려있다. 특히 더 효율적이라면.
여기에 실제 코드는 다음과 같습니다
Get-Content c:\path\to\testhostlist.txt | Foreach-Object {
Get-WmiObject Win32_Product |
Where-Object { $_.Name -f "'C:\path\to\testauthapplist.txt'" |
ConvertTo-Html name,vendor,version -title $name -body "<H2>Unauthorized Applications.</H2>"}} |
Set-Content c:\path\to\unauthapplisttest.html
코드를 이해할 수 없습니다. ** 위치 - 개체 ** 필터는 조건을 테스트하지 않습니다. '$ _. Name '은 형식 문자열이 아니기 때문에'$ _. Name -f " 'C : \ path \ to \ testauthapplist.txt' '"는 이해가되지 않습니다. 아마도 복사/붙여 넣기 오류가 있었습니까? '$ _. Name '과'-f' 사이에는 뭔가 빠져있는 것처럼 보입니다. 또한 한 번만 나열하면 호스트 파일의 첫 번째 행이 두 번째로 발생합니까? 이것은 출구 조건이 필요한 무한 루프처럼 보이지 않습니다. ** Foreach-Object **는 무기한 반복되지 않습니다. 아마도 코드가 엉망이되어 막혔을 것입니다. –
'Where-Object {$ _. Name -f " 'C : \ path \ to \ testauthapplist.txt'"} "로 무엇을하려하는지 설명하십시오. 문제는 그게 당신이하려는 일에 맞는 구문이 아니라는 것입니다. –
그것이 종료 될 것으로 판단됩니다. 그것은 단지 매우 느립니다. 'Get-WmiObject Win32_Product'는 매우 느리고 입력 파일의 각 줄마다 작업을 수행합니다. 처음에는 한 번 해보고 결과를 목록에 보관해야합니다. 나는 Adi와 당신의 어디에서 물건이 이상하다는 것에 동의합니다. 나는 한발 물러서서 모든 것을 재 작업해야한다고 생각합니다. –