Pergunta

Estou executando uma consulta no SQL Server e retornando um único conjunto de resultados de coluna. Preciso fazer um loop através do conjunto de resultados e encontrar nomes de arquivos que correspondam ao registro do conjunto de resultados. Parte do nome do arquivo é um número de sequência. Preciso classificar os arquivos em ordem crescente, selecionar o primeiro arquivo e copiar apenas esse arquivo para um subdiretório. Os registros no conjunto de resultados são assim:

Membros.net membros_comments1.net membros_comments2.net membros_language.net membros_cover_ohc.net membros_problem_list.net

Os nomes dos arquivos têm esse tipo de estrutura:

00_1914330_members.net

Alguém pode me dizer por que isso não atinge meu resultado final?

add-pssnapin sqlservercmdletsnapin100
add-pssnapin sqlserverprovidersnapin100
cd SQLSERVER:\SQL\LOCALHOST\DEFAULT\Databases\SYSDB\Tables\dbo.STG0_EXPORT_JOBS 
$ds = Invoke-Sqlcmd -ServerInstance 'LOCALHOST' -Query "SELECT CASE WHEN SUBSTRING([EXPORT_NAME],1,3) = 'MHC' THEN SUBSTRING([EXPORT_NAME],5,(LEN([EXPORT_NAME])))+'.net' ELSE [EXPORT_NAME]+'.net' END AS export FROM [SYSDB].[dbo].[STG0_EXPORT_JOBS] WHERE [JOB_NAME] = 'MHC_STG0_MEMBERS'"
foreach ($files in $ds) {
    $oldestfile = Get-ChildItem C:\Scripts | 
        where{!$_.PSIsContainer -and $_.Name.EndsWith("$($files.export)")} | 
        sort-object -property name | select-object -first 1 Name | 
        Copy-Item "C:\Scripts\" + $oldestfile.substring(7,$oldestfile.length - 8) `
                   C:\Scripts\MEMBERS
 }

Aqui está o que recebo quando corro isto:

Windows PowerShell Copyright (c) 2009 Microsoft Corporation. Todos os direitos reservados.

PS H:> C: PowerShell_movekorefiles.ps1 Token inesperado 'em' na expressão ou declaração. At C:powershell_MoveKoreFiles.ps1:1 char:472 + add-pssnapin sqlserverprovidersnapin100 add-pssnapin sqlservercmdletsnapin100 Set-Location SQLSERVER:SQLLOCALHOSTDEFAULTDatabasesSYSDBTablesdbo.STG0_ EXPORT_JOBS $ds=Invoke-Sqlcmd - Consulta "Selecione Caso quando substring ([export_name], 1,3) = 'mhc' e depois substring ([export_name], 5, (len ([export_name]))+'. Net' else [export_name]+'. Net. 'Termine como exportação de [sysdb]. [Dbo]. [Stg0_export_jobs] onde [job_name] =' mhc_stg0_members '"-serverInstance" lochost "foreach ($ arquivos em <<< $ ds) {$ OldestFile = Get -childitem C : Scripts | onde {! $.PSISCONTINER -END $.Name.endSwith ("$ ($ files.export)")} | Sort -object -Property Nome -Descending | se lect -object -primeiro 1 nome | copy -item -path "C: scripts "+$ OldestFile .Substring (7, $ OldestFile.Length - 8) -Destinação C: scripts membros} + categoryInfo: parserError: (em: string) [], parseexception + totalmente qualificado erorid: inesperado.

PS H:>

Foi útil?

Solução

Eu acho que pode haver muitos tubos no roteiro. Remova o após o primeiro nome de seleção, por exemplo:

Add-PSSnapin sqlservercmdletsnapin100
Add-PSSnapin sqlserverprovidersnapin100
cd SQLSERVER:\SQL\LOCALHOST\DEFAULT\Databases\SYSDB\Tables\dbo.STG0_EXPORT_JOBS
$ds = Invoke-Sqlcmd -ServerInstance 'LOCALHOST' -Query "SELECT CASE WHEN " +
          "SUBSTRING([EXPORT_NAME],1,3) = 'MHC' THEN " +
          "SUBSTRING([EXPORT_NAME],5,(LEN([EXPORT_NAME])))+'.net' " +
          "ELSE [EXPORT_NAME]+'.net' END AS export " +
          "FROM [SYSDB].[dbo].[STG0_EXPORT_JOBS] " +
          "WHERE [JOB_NAME] = 'MHC_STG0_MEMBERS'" 
foreach ($files in $ds) 
{ 
    $oldestfile = Get-ChildItem C:\Scripts |  
        Where {!$_.PSIsContainer -and $_.Name.EndsWith("$($files.export)")} |
        Sort name | Select Name -First 1
    $oldName = "C:\Scripts\$($oldestfile.substring(7,$oldestfile.length - 8))" 
    Copy-Item $oldName C:\Scripts\MEMBERS 
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top