J'exécute une requête dans SQL Server et renvoie un jeu de résultats de colonne unique. Je dois faire une boucle dans le jeu de résultats et trouver les noms de fichiers correspondant à l'enregistrement du jeu de résultats. Une partie du nom de fichier est un numéro de séquence. J'ai besoin de trier les fichiers dans l'ordre croissant, sélectionnez le premier fichier, puis copiez uniquement ce fichier dans un sous-répertoire. Les enregistrements du jeu de résultats ressembler à ceci:Fichiers de filtre Powershell par jeu de résultats SQL Server et copie
MEMBERS.net MEMBERS_COMMENTS1.net MEMBERS_COMMENTS2.net MEMBERS_LANGUAGE.net MEMBERS_COVER_OHC.net MEMBERS_PROBLEM_LIST.net
Les noms de fichiers ont ce genre de structure:
00_1914330_MEMBERS.net
Quelqu'un peut-il me dire pourquoi cela ne permet pas d'atteindre mon résultat 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
}
Voici ce que je reçois quand je lance ceci:
Windows PowerShell Copyright (C) 2009 Microsoft Corporation. Tous les droits sont réservés. PS:> C: \ powershell_MoveKoreFiles.ps1 Jeton inattendu 'in' dans une expression ou une instruction. C: \ powershell_MoveKoreFiles.ps1: 1 Caractère: 472 + add-pssnapin sqlserverprovidersnapin100 add-pssnapin sqlservercmdletsnapin100 Set-Location SQLServer: \ SQL \ LOCALHOST \ DEFAULT \ Databases \ SysDB \ Tables \ dbo.STG0_ EXPORT_JOBS $ ds = Invoke-Sqlcmd -Query "SELECT CASE SUBSTRING ([EXPORT_NAME], 1,3) = 'MHC' ALORS SUBSTRING ([EXPORT_NAME], 5, (LEN ([EXPORT_NAME]))) + '. Net' SINON [ nom_exportation] + 'net' END AS exporter à partir de [SysDB]. [dbo]. [STG0_EXPORT_JOBS] où [ JOB_NAME] « -ServerInstance "LOCALHOST" 'MHC_STG0_MEMBERS' = foreach (fichiers $ dans < < < < $ ds) {$ olderfile = Obtenir-ChildItem C: \ Scripts | où {! $ .PSIsContainer -et $ .Name.EndsWith ("$ ($ files.export)")} | trier-objet -property name -descending | se lect-object -first 1 Nom | Copier-Item -path "C: \ Scripts \ « + $ oldestfile.substring (7 , oldestfile.length $ - 8) -destination C: \ Scripts \ MEMBRES} + CategoryInfo: ParserError: (en: String) [], ParseException + FullyQualifiedErrorId: UnexpectedToken
PS H:>
Que retourne-t-il dans la boucle foreach pour '$ files.GetType()'? – stej
Il retourne le dessous pour chaque ligne, mais l'ensemble des résultats ne correspondrait pas ici. PS SQLServer: \ SQL \ LOCALHOST \ DEFAULT \ Bases de données \ SysDB \ Tables \ dbo.STG0_EXPORT_JOBS> foreach (fichiers $ en $ ds) {files.GetType $()} IsPublic IsSerial Nom BaseType ---- ------------ ---- -------- True False DataRow System.Object – stittdba
Hm, c'est étrange. Lorsque vous essayez 'foreach ($ files dans $ ds) {$ files.GetType()}' cela fonctionne mais quand vous essayez le code dans votre question, il renvoie * Jeton inattendu 'in' dans l'expression ou la déclaration. *? – stej