2011-12-06 3 views
1

Im Powershell에 매우 새롭고 '이전'폴더를 확인하고 찾을 수없는 경우 만들 스크립트에 대해 다음 코드를 함께 사용했습니다. 그런 다음 압축 된 웹 로그를 현재 위치에서 '이전'폴더로 이동합니다. 야간에 실행되도록 설정할 수 있고 새 서버 나 삭제 된 서버로 업데이트 할 필요가 없도록 SQL 쿼리에서 서버 이름과 웹 사이트 이름을 가져 오도록 작성했습니다. 필자는 지금까지 작성한 내용을 가지고 있지만 새로운 내용이므로 마지막 구문을 이해할 수 없습니다. 내가하고 싶은 무엇두 개의 SQL 쿼리를 매개 변수로 전달할 데이터 집합으로 전달합니다.

clear 
$SqlServer = "SERVER" 
$SqlCatalog = "DATABASE" 
$SqlQuery = "select hsa.servername from SERVER.dbo.serversapp hsa 
inner join SERVER.dbo.apphosts hah on hsa.vchservername = hah.vchservername 
where hsa.tirecordstatus = 1 
order by hsa.vchservername desc" 
$SqlQuery1 = "select hah.vchhost from SERVER.dbo.serversapp hsa 
inner join SERVER.dbo.apphosts hah on hsa.vchservername = hah.vchservername 
where hsa.tirecordstatus = 1 
order by hsa.vchservername desc" 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server = $SqlServer; Database = $SqlCatalog; Integrated Security = True" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.CommandText = $SqlQuery 
$SqlCmd.Connection = $SqlConnection 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet 
$SqlAdapter.Fill($DataSet) 
$SqlConnection.Close() 
$DataSet.Tables[0] 

그래서 나는 다음과 같은 코드에 대한 매개 변수로 각각 전달할 수 있습니다 그것은 자신의 데이터 집합 테이블의 각을 각각 $ SQLQuery로 실행을하고 저장할 수 있습니다. 내가 알아야 할 것은 다음과 같습니다.

1) SQL 쿼리를 실행하고 각각을 자신의 데이터 셋이나 테이블로 만들려면 어떻게해야합니까? $ Servername 및 $ HostedGroup?

2) $ Servername 매개 변수의 각 서버에서 아래 코드를 반복하도록 어떻게 설정합니까?

$Servername = Dataset1 
$Hostedgroup = Dataset2 
$OldFolder = "\\$Servername\C$\Ren\Weblogs\$Hostedgroup\old" 
$FolderExists = Test-Path $OldFolder 


if($FolderExists -eq $False) 
{ 
new-item \\$Servername\C$\Ren\Weblogs\$Hostedgroup\old -type directory 
} 
then 
{ 
if(Test-Path \\$Servername\C$\Ren\Weblogs\old\W3SVC2) 
{ 
get-childitem -path '\\$Servername\C$\Ren\WebLogs\$Hostedgroup\W3SVC2' -recurse -include *.zip | move-item -destination '\\$Servername\C$\Ren\WebLogs\$Hostedgroup\old' 

답변

1

$SqlAdapter.Fill($DataSet) 정수를 반환합니다. 스크립트/함수가 $null에 할당하거나 Out-Null을 사용하여 스크립트/함수를 반환하지 못하게해야합니다. (예 : $null = $SqlAdapter.Fill($DataSet))

질문에 대한 답변으로 단일 검색어에서 두 입력란을 모두 반환 한 다음 결과를 반복 할 수 있습니다. 패턴은 다음과 같습니다.

function Get-HostedServerApp { 
    $SqlServer = "SERVER" 
    $SqlCatalog = "DATABASE" 
    $SqlQuery = @" 
select hsa.vchappservername, hah.vchhost 
from SERVER.dbo.hostedserversapp hsa 
inner join SERVER.dbo.hostedapphosts hah on hsa.vchappservername = hah.vchappservername 
where hsa.tirecordstatus = 1 
order by hsa.vchappservername desc 
"@ 
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
    $SqlConnection.ConnectionString = "Server = $SqlServer; Database = $SqlCatalog; Integrated Security = True" 
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
    $SqlCmd.CommandText = $SqlQuery 
    $SqlCmd.Connection = $SqlConnection 
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
    $SqlAdapter.SelectCommand = $SqlCmd 
    $DataSet = New-Object System.Data.DataSet 
    $null = $SqlAdapter.Fill($DataSet) 
    $SqlConnection.Close() 
    $Dataset.Tables[0] 
} 

# Place your logic in this function 
function SomeFunction { 
    param(
    $Servername, 
    $Hostedgroup 
    ) 

    "\\$Servername\C`$\Renaissance\Weblogs\$Hostedgroup\old" 
} 

$data = Get-HostedServerApp 

$data| foreach{SomeFunction -ServerName $_.vchappservername -HostedGroup $_.vchhost} 
+0

했었습니다. 예제의 마지막 줄에서'Get-HostedServerApp'에서 반환 된 레코드는'foreach' CmdLet에 전달됩니다 (전체 이름은'ForEach-Object'입니다). 'Foreach'는 파이프 라인을 통해 전달되는 각 객체에 대한 스크립트 블록을 실행합니다. 더 자세한 정보는'ForEach-Object -Online'을 참고하십시오. – Rynant

+0

'\\ $ Servername \ C' $ \ Renaissance \ Weblogs \ $ Hostedgroup \ old'는 코드의 자리 표시 자로 추가됩니다. 함수 위의 주석에서 나는 다음과 같이 썼다 : # #이 함수에 논리를 둔다. – Rynant

+0

함수 때문에 더 이상 매개 변수가 필요 없다. $ Servername = Dataset1 <------------- - $ Hostedgroup = Dataset2 <-------------- – bbinnebose

관련 문제