我正在在SQL Server中执行查询,并返回单个列结果集。我需要循环浏览结果集,并找到与结果集中的记录相匹配的文件名。文件名的一部分是序列号。我需要按上升顺序对文件进行排序,选择第一个文件,然后仅将该文件复制到子目录。结果集中的记录看起来像:

成员.NET成员_Comments1.NET成员_Comments2.NET成员_language.net成员_COVER_OHC.NET成员

文件名具有这种结构:

00_1914330_Members.net

有人可以告诉我为什么这不能实现我的最终结果吗?

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
 }

这是我运行时得到的:

Windows Powershell版权所有(C)2009 Microsoft Corporation。版权所有。

PS H:> C: Powershell_movekorefiles.ps1意外的令牌in in表达或语句。 At C:powershell_MoveKoreFiles.ps1:1 char:472 + add-pssnapin sqlserverprovidersnapin100 add-pssnapin sqlservercmdletsnapin100 Set-Location SQLSERVER:SQLLOCALHOSTDEFAULTDatabasesSYSDBTablesdbo.STG0_ EXPORT_JOBS $ds=Invoke-Sqlcmd -查询“选择case当substring([export_name],1,3)='mhc'然后substring([export_name],5,([export_name])))+'。net'else'else [export_name]+'。 “以[sysdb]导出。 : scripts | where {!$.psiscontainer-和$。 。

PS H:>

有帮助吗?

解决方案

我认为脚本中可能有太多的管道。在选择-first 1名称之后删除一个名称,例如:

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 
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top