그래서 난 내 스크립트에서이 루프를 가지고 :속도 최대 PowerShell 스크립트 (호출-SQLCMD 및 Word 개체)
foreach ($candID in Get-Content $candList)
{
$candID = $candID -replace '\s',''
$candID
$templateDir = Get-ChildItem ($ScriptPath + "Templates\Resumes\") | Get-Random -Count 1
$templateFile = $templateDir
$templateDir = ($ScriptPath + "Templates\Resumes\" + $templateDir)
$lname = Invoke-Sqlcmd -Query "SELECT LEFT(personFirstName, 1) FROM tblPErson WHERE personID = $candID" -serverinstance $ServerAddress -Database $DatabaseName
$firstname = Invoke-Sqlcmd -Query "SELECT personFirstName FROM tblPErson WHERE personID = $candID" -serverinstance $ServerAddress -Database $DatabaseName
$surname = Invoke-Sqlcmd -Query "SELECT personSurname FROM tblPErson WHERE personID = $candID" -serverinstance $ServerAddress -Database $DatabaseName
$Address1 = Invoke-Sqlcmd -Query "SELECT CandidateAddress FROM tblCandidate WHERE CandidateID = $candID" -serverinstance $ServerAddress -Database $DatabaseName
$City = Invoke-Sqlcmd -Query "SELECT CandidateCity FROM tblCandidate WHERE CandidateID = $candID" -serverinstance $ServerAddress -Database $DatabaseName
$Postcode = Invoke-Sqlcmd -Query "SELECT CandidatePostcode FROM tblCandidate WHERE CandidateID = $candID" -serverinstance $ServerAddress -Database $DatabaseName
$Mobile = Invoke-Sqlcmd -Query "SELECT personMobileTelephone FROM tblPErson WHERE personID = $candID" -serverinstance $ServerAddress -Database $DatabaseName
$State = Invoke-Sqlcmd -Query "SELECT CandidateState FROM tblCandidate WHERE CandidateID = $candID" -serverinstance $ServerAddress -Database $DatabaseName
$firstname = $firstname.ItemArray[0]
$surname = $surname.ItemArray[0]
$Address1 = $Address1.ItemArray[0]
$City = $City.ItemArray[0]
$Postcode = $Postcode.ItemArray[0]
$Mobile = $Mobile.ItemArray[0]
$State = $State.ItemArray[0]
$lName = $lName.ItemArray[0]
cls
### Loop Visual
Write-Host ""
Write-Host "Generating resumes" -ForegroundColor Cyan
Write-Host " ---------------------------------------------------------------------------------------------------- "
Write-Host ""
Write-Host ""
Write-Host "Using resume template: $templateFile" -foregroundColor GREEN
Write-Host ""
Write-Host "Data:"
Write-Host " Firstname = $firstname"
Write-Host " surname = $surname"
Write-Host " Address1 = $Address1"
Write-Host " City = $City"
Write-Host " Postcode = $Postcode"
Write-Host " Mobile = $Mobile"
Write-Host " State = $State"
### End Loop Visual
$filename = ($firstname + " " + $surname + " - " + $candID + ".doc")
$filename2 = ($firstname + " " + $surname + " - " + $candID + ".txt")
$saveAs = ($scriptPath + "Documents\Original Resumes\" + $lName + "\" + $filename)
$saveAs2 = ($scriptPath + "Documents\Original Resumes\" + $lName + "\" + $filename2)
$objWord = New-Object -comobject Word.Application
$doc=$objWord.documents.Add($templateDir)
$objWord.Visible = $false
$doc.Bookmarks.Item("Address1").Range.Text = $Address1
$doc.Bookmarks.Item("firstName").Range.Text = $firstname
$doc.Bookmarks.Item("surName").Range.Text = $surname
$doc.Bookmarks.Item("City").Range.Text = $City
$doc.Bookmarks.Item("Postcode").Range.Text = $Postcode
$doc.Bookmarks.Item("Mobile").Range.Text = $Mobile
$doc.Bookmarks.Item("State").Range.Text = $State
$doc.SaveAs([REF]$saveAs)
$doc.Close()
$doc2=$objWord.documents.Add($saveAs)
$doc2.SaveAs([REF]$saveAs2, [REF] 2)
$objWord.Quit()
}
기본적으로, 내가 만드는 오전 스푸핑 워드 템플릿을 사용하여 데이터베이스에서 레코드를 다시 시작합니다. 스크립트는 작동하지만 5 초마다 2 ~ 3 개의 이력서 만 작성합니다. 전체 데이터베이스 (1 백만개의 스푸핑 된 레코드)를 채워야하기 때문에 조금 문제가됩니다.
플러스, 어떤 시점에서 템플릿을 임의로 만들지 않으므로 시간이 오래 걸리기 때문에 사람의 산업에 음식을 제공하고 각 이력서에 더 많은 데이터를 추가 할 수 있습니다 (기술 , 참조 등).
조금 더 빠르게 할 수있는 방법이 있습니까?
1 일이 하나 개의 문장에 SQL을 감소하는 것입니다 : 샘플 데이터를 가지고 또는
$candList
에서 해당 파일이 정말로에 포함 된 내용을 알지 못하고,이 같은 스크립트 뭔가의 위쪽 절반을 할 수. 하나의 쿼리에서 각 값을 쿼리 할 필요가 없습니다. 그것을 하나로 가져 가라. '$ objWord' 만 써야합니다. 루프 외부에서 한 번 초기화하십시오. 밖에 나가십시오. 당신이 그것을 피할 수있는 경우 콘솔에 정보를 쓰는 데 시간을 낭비하지 마십시오. 천천히. 로깅을 원하면 파일에 넣으십시오. – Matt
좋습니다, 감사합니다! 그러면 각 값은 항목 배열에서 다른 숫자가됩니까? 그래서 성은 sqlResult.ItemArray [1]이 될 것입니까? –
모든 변경 사항을 적용하면 5 초당 7 - 8이됩니다. 이는 상당한 증가입니다. 감사합니다. 모든 이력서를 작성하는 데 8 일이 걸리 겠지만 20보다 우수합니다. –