필자는 필자의 필자가 PowerShell을 배우면서 돌아 왔으며 필자는 필자의 능력 한계에 부딪혔다. 그래서 누군가가 나를 올바른 방향으로 던져 줄 수 있는지 궁금하거나, 내가하고 싶은 일이 가능하면 나에게 말해 줄 수 있습니까?Powershell CSV to SQL 쿼리
나는 웹에서 많은 수의 파일을 다운로드 한 스크립트를 작성한 후 함께 작업하고자하는 데이터를 제외한 모든 파일을 삭제합니다. 이것들은 .csv의 것입니다 ...
데이터가 다운로드 될 때까지 내가 함께 조종 할 수 있었던 Powershell 코드를 추가했습니다. 이 파일 중 하나의 데이터 추출은 다음과 같습니다.
A 열은
열 B는 ISIN (이것은 작업 정보이다)
열 C 난에 SQL 질의 데이터를 원하는
열 D가 수치도 포함 포함한 설명을 포함
에 반환하면 샘플 데이터에 대한 링크를 찾아주세요 Data Example Data Example
내가 아마 다른 파일로이 작업을 내보낼 필요가 있다고 생각
Select *
From CL
Where CLISIN in ('GB0004835483',
'BE0003793107',
'GB00B7V2GY97',
'GB0000595859',
'GB00B1VCNQ84',
'GB0004992003',
'GB0002369352')
열 B 내의 데이터에 따라 다음 SQL 명령을 실행 내가 그때 달성하고자입니까? 내 보낸 최종 결과를 사용하지만이 값을이 CSV 파일의 D 열에 배치해야합니다.
나는이 사실을 명확히하기를 바랍니다. 그렇지 않다면 가능한 한 확장시켜야합니다.
필자는 PowerShell을 사용하여 B 열의 각 항목에 대한 쿼리를 자동으로 실행하고 일치하는 쿼리의 결과를 열 D의 상관 행에 추가 할 수 있습니까?
#### DOWNLOAD LOCATIONS ####
$DownloadPTMLocation = "L:\Operations Database\TakeOverPanel\PTMDisclosureTable.xls"
$DownloadPTMCSVLocation = "L:\Operations Database\TakeOverPanel\PTMDisclosureTable.csv"
$DownloadIPTMLocation = "L:\Operations Database\TakeOverPanel\IPTMDisclosureTable.xls"
$DownloadIPTMCSVLocation = "L:\Operations Database\TakeOverPanel\IPTMDisclosureTable.csv"
#### WEB URLS ###
$PTMURL = "http://www.thetakeoverpanel.org.uk/new/disclosureTable/v3/disclosuretable.xls"
$PTMCSVURL = "http://www.thetakeoverpanel.org.uk/new/disclosureTable/v3/disclosuretable.csv"
$IPTMURL = "http://irishtakeoverpanel.ie/disclosure/disclosuretable.xls"
$IPTMCSVURL = "http://irishtakeoverpanel.ie/disclosure/disclosuretable.csv"
$Path = Get-Location
#### Load Web Service ####
$WebClient = New-Object System.Net.WebClient
#### Start download Process ####
Write-Host "Downloading PTM File 1 of 4" $Path -ForegroundColor Green
$Url = $PTMURL
$Path = $DownloadPTMLocation
$WebClient.DownloadFile($PTMURL, $DownloadPTMLocation)
Write-Host "Downloading IPTM File 2 of 3" $Path -ForegroundColor Blue
$Url = $IPTMURL
$Path = $DownloadIPTMLocation
$WebClient.DownloadFile($IPTMURL, $DownloadIPTMLocation)
Write-Host "Downloading PTM Csv File 3 of 4" $Path -ForegroundColor Gray
$Url = $PTMCSVURL
$Path = $DownloadPTMCSVLocation
$WebClient.DownloadFile($PTMCSVURL, $DownloadPTMCSVLocation)
Write-Host "Downloading IPTM File 4 of 4" $Path -ForegroundColor Red
$Url = $IPTMCSVURL
$Path = $DownloadIPTMCSVLocation
$WebClient.DownloadFile($IPTMCSVURL, $DownloadIPTMCSVLocation)
#####################
## PTM ##
#Customise Vars
$DownloadPTMCSVLocation = "L:\Operations Database\TakeOverPanel\PTMDisclosureTable.csv"
$OutputPTMCSVLocation = "L:\Operations Database\TakeOverPanel\PTMDisclosureTableb.csv"
$Match = "ISIN"
$Matchs = "NSI"
## Strips all lines that do not contain ISIN ##
(Get-Content $DownloadPTMCSVLocation) -match $Match | Out-File $OutputPTMCSVLocation
Remove-Item $DownloadPTMCSVLocation
Rename-Item $OutputPTMCSVLocation -NewName $DownloadPTMCSVLocation
(Get-Content $DownloadPTMCSVLocation) -match $Matchs | Out-File $OutputPTMCSVLocation
Remove-Item $DownloadPTMCSVLocation
Rename-Item $OutputPTMCSVLocation -NewName $DownloadPTMCSVLocation
Get-Content $DownloadPTMCSVLocation | % {
$_ -replace 'ISIN: ',''
} | % {
$_ -replace 'NSI: ',''
} | Set-Content $OutputPTMCSVLocation
그래서 더이 작업을 여기에 (한 번 더 SQL 쿼리를 반환) 벽에 충돌 한
내가 여기에 구글을 통해 답도 찾을 수없는이 ... 지금까지 작업 코드는 ...
###########
## BEGIN ##
###########
#### DOWNLOAD LOCATIONS ####
$DownloadPTMCSVLocation = "L:\Operations Database\TakeOverPanel\PTMDisclosureTable.csv"
$OutputPTMCSVLocation = "L:\Operations Database\TakeOverPanel\PTMDisclosureTableb.csv"
#### WEB URLS ###
$PTMCSVURL = "http://www.thetakeoverpanel.org.uk/new/disclosureTable/v3/disclosuretable.csv"
$Path = Get-Location
#### Load Web Service ####
$WebClient = New-Object System.Net.WebClient
#### Start download Process ####
Write-Host "Downloading PTM Csv" $Path -ForegroundColor Gray
$Url = $PTMCSVURL
$Path = $DownloadPTMCSVLocation
$WebClient.DownloadFile($PTMCSVURL, $DownloadPTMCSVLocation)
#####################
## PTM ##
$Match = "ISIN"
$Matchs = "NSI"
Import-Csv $DownloadPTMCSVLocation -Header @("A", "ISIN", "NSI", "Output") | #Import the CSV
Where { $_.ISIN -like "ISIN: ????????????" -and $_.NSI -like "NSI:*" } | #Filter rows
Foreach-Object {
$_.ISIN = $_.ISIN.Replace("ISIN: ", "")
$_.NSI = $_.NSI.Replace("NSI: ", "")
$query = "select CLIALPHASORTCODE, vl2securitynum, sum(cast(vl2beneficial as float)) as beneficial
from t5vaultsl2 vl2 left outer join t5client cli
on vl2.VL2CLIENTNUM = cli.CLICODE
where vl2.vl2securitynum = '$($_.ISIN)'
group by CLIALPHASORTCODE, VL2SECURITYNUM"
##Credentials##
$MISA = 'xx.xx.x.xx'
$MISB = 'xx.xx.x.xx'
$userName = 'UN'
$PassWord='PW'
$DB = 'reporting'
## CREATE MIS CREDENTIALS ##
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Data Source=$MISA;Initial Catalog=$DB;
Initial Catalog=$DB;User ID=$userName;Password=$PassWord;"
## - Runs Script from Set Location
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand;
$SqlCMD.CommandText = $query;
$SqlCmd.Connection = $SqlConnection;
그래서 스크립트는 ... 다음
#### DOWNLOAD LOCATIONS ####
$DownloadPTMCSVLocation = "L:\Operations Database\TakeOverPanel\PTMDisclosureTable.csv"
$OutputPTMCSVLocation = "L:\Operations Database\TakeOverPanel\PTMDisclosureTableb.csv"
$ExportLocation = "L:\Operations Database\TakeOverPanel\test.csv"
$ExportLocationb = "L:\Operations Database\TakeOverPanel\test.xml"
#### WEB URLS ###
$PTMCSVURL = "http://www.thetakeoverpanel.org.uk/new/disclosureTable/v3/disclosuretable.csv"
$Path = Get-Location
#### Load Web Service ####
$WebClient = New-Object System.Net.WebClient
#### Start download Process ####
Write-Host "Downloading PTM Csv" $Path -ForegroundColor Gray
$Url = $PTMCSVURL
$Path = $DownloadPTMCSVLocation
$WebClient.DownloadFile($PTMCSVURL, $DownloadPTMCSVLocation)
################
#### Query ####
################
$query = @"
select CLIALPHASORTCODE, vl2securitynum, sum(cast(vl2beneficial as float)) as beneficial
from t5vaultsl2 vl2 left outer join t5client cli
on vl2.VL2CLIENTNUM = cli.CLICODE
where vl2.vl2securitynum = '$($_.ISIN)'
group by CLIALPHASORTCODE, VL2SECURITYNUM
"@;
#####################################
$Match = "ISIN"
$Matchs = "NSI"
## Prepare SQL ##
$MISA = 'xx.xx.x.xx'
$MISB = 'xx.xx.x.xx'
$userName = 'UN'
$PassWord='PW'
$DB = 'reporting'
## CREATE SQL Connection ##
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Data Source=$MISA;Initial Catalog=$DB;Initial Catalog=$DB;User ID=$userName;Password=$PassWord;"
$SqlConnection.Open()
# Put everything in a Try block so if there is an error the SQL
# connection is still closed
try
{
$SqlCmd = $SqlConnection.CreateCommand()
## Process CSV ##
Import-Csv $DownloadPTMCSVLocation -Header @("A", "ISIN", "NSI", "Output") | #Import the CSV
Where { $_.ISIN -like "ISIN: ????????????" -and $_.NSI -like "NSI:*" } | #Filter rows
Foreach-Object {
$_.ISIN = $_.ISIN.Replace("ISIN: ", "")
$_.NSI = $_.NSI.Replace("NSI: ", "")
# Get data from SQL
$query = "select CLIALPHASORTCODE, vl2securitynum, sum(cast(vl2beneficial as float)) as beneficial from t5vaultsl2 vl2 left outer join t5client cli on vl2.VL2CLIENTNUM = cli.CLICODE where vl2.vl2securitynum = '$($_.ISIN)' group by CLIALPHASORTCODE, VL2SECURITYNUM"
$SqlCmd.CommandText = $query
$result = $SqlCmd.ExecuteReader()
$table = New-Object "System.Data.DataTable"
$table.Load($result)
$t = $table.Vl2Beneficial
# Pass row on through the pipeline
$_.Output = $table.VL2Beneficial
$table | Export-Clixml $ExportLocationb
Write-Output $_
} | Export-Csv $OutputPTMCSVLocation -NoTypeInformation
}
finally
{
# Always close SQL connection even if error is encountered.
$SqlConnection.Close()
}
CSV 파일의 데이터를 제공하십시오 (스크린 샷이 아님). CSV에서 얻으려는 결과물은 무엇입니까? 이 CSV, 결정 구조와 함께 OPENROWSET을 사용하여 SQL Server 측에서이 파일의 데이터를 읽을 수 있습니다. – gofr1
PTM 파일은 제공된 링크에서 다운로드 할 수 있습니다. –
안녕 Deadly_Bagel 예, 다운로드 할 수 있으며 내 코드에서 내가하고있는 일은 내가 보유하고있는 PTM 파일을 비교하려고하는 것입니다. 어느 곳에서 SQL 요구 사항이 들어 왔습니까? Gofr1, 필요한 변경 사항이 추가되었습니다. 신뢰하고 있습니다 ... D 열 내에서 얻으려는 출력은 숫자 위치입니다. –