2014-04-17 2 views
0
내가 먼저 데이터베이스에 내가 만드는 오전 SELECT에서 연결 파워 쉘 코드를 사용하고

를 사용하여,이 출력은 출력 "루프는 모든 % SERVERNAME에서"get-childitem "을 만들어 모든 EXE 파일을 찾고 out-gridview로 출력합니다.PowerShell을 foreach는이 SQL 데이터 입력

내 foreach 문은 다음과 같이하지만 분명히 작동하지 않습니다 :이 foreach는이

$Connection.open() 
Write-host "Database Connection $databasename = SUCCESSFULL : Searching role $Role in $palier ..." -foregroundcolor green -backgroundcolor black 
$SqlCmd.CommandText = $SqlQuery 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$SqlCmd.Connection = $Connection 
$DataSet = New-Object System.Data.DataSet 
$SqlAdapter.Fill($Dataset) 
$Connection.Close() 
$Result = $Dataset.Tables[0] 
$Result 


Foreach ($name in $Result) 
{ 

$name = Get-ChildItem "\\$_\c$\" -recurse -filter *.exe 

} 

을 수행하는 방법은?

P. : 데이터베이스 연결이 작동하고 있기 때문에 많은 정보에 추가하고 싶지 않았고 foreach 측에서 실패한 부분을 이해하고 싶습니다.

답변

1

$Result은 데이터 행 모음이며 foreach$_ (파이프 라인 개체에만 해당)을 사용할 수 없습니다. 결과를 반복하고 각 행에서 Name 필드를 가져와야합니다.

루프에서 각 반복마다 $name을 덮어 쓰고 있으므로 마지막 Get-ChildItem의 결과 만 출력합니다. 당신은 출력 결과를 수집해야합니다.

$ExeList = @(); 
Foreach ($Record in $Result) { 
    $ExeList += Get-ChildItem -path \\$($Record.name)\c$\ -recurse -filter *.exe 
} 
$ExeList|out-gridview; 
+0

매력처럼 작동합니다. "@()"과 "\\ $ ($ Record.name)"라는 두 개의 매개 변수를 설명해 주시겠습니까? 왜 레코드 이름 앞에 달러 기호를 사용합니까? –

+0

'@()'는'GCI' 결과를 채우기위한 빈 배열을 만듭니다. '$ ($ Results.name)'은 따옴표로 묶은 문자열 내에서 속성에 대한 변수 확장을 얻는 방법입니다 (예, 여기서 인용하지 않았습니다 - 습관의 힘). – alroc