基于文件名创建脚本以使用Powershell SQL查询批量重命名文件

基于文件名创建脚本以使用Powershell SQL查询批量重命名文件,sql,powershell,Sql,Powershell,我正在创建一个脚本,该脚本将扫描.dat文件的文件夹结构,并使用该文件名执行有关该文件信息的SQL查询,并使用此数据重命名该文件 我已经创建了以下几段代码,但在让它们协同工作时遇到了困难 使用get childitem创建文件列表 Get-ChildItem "C:\Kaseya\Storage\" -recurse -filter "*.dat" | Select-Object -ExpandProperty Name 产生以下预期结果: 085852f7-314f-4748-958b-97

我正在创建一个脚本,该脚本将扫描.dat文件的文件夹结构,并使用该文件名执行有关该文件信息的SQL查询,并使用此数据重命名该文件

我已经创建了以下几段代码,但在让它们协同工作时遇到了困难

使用get childitem创建文件列表

Get-ChildItem "C:\Kaseya\Storage\" -recurse -filter "*.dat" | Select-Object -ExpandProperty Name
产生以下预期结果:

085852f7-314f-4748-958b-97f6f74abedf.dat
0b0cef66-2553-4a5c-a808-7fee38d742f0.dat
0ce00b36-4920-4a22-913f-2281f36ea32c.dat
0d583f3c-13e1-45b2-8b93-e0b9fa7939f2.dat
15c58336-8f5c-4951-9b7f-43f3f8fe10ed.dat
1c58a339-55c1-4620-a2b6-3135b9dea17e.dat
1ca0d9a3-0510-44f3-bb47-25f42b607fe7.dat
1eacb9bb-5c8d-4b3b-8adb-67bf50da8778.dat
22782d89-0d09-4d30-b344-1d224e5138d4.dat
2519d974-b36a-44e3-8717-75b024d6ed80.dat
26c02398-e4b1-461a-aef0-e3af4254648b.dat
2c910f9e-4319-4769-a9a2-436cdacf1205.dat
2fb25b6f-aa10-4b13-80c6-82b5a70215e6.dat
31af4f7e-9de9-40fc-aed6-6d6a790e015e.dat
35df29b3-8760-41ed-806c-d77b81d02600.dat
3b93d671-5416-471a-a114-7a2a0fa0001a.dat
41d9cad9-121a-49f2-84cb-c0a501c65c63.dat
然后,我尝试将这些信息引入ForEach并通过SQL查询进行循环

    ForEach($file in $files){

    $Global:SCCMSQLSERVER = "nisql01" 
    $Global:DBNAME = "ksubscribers" 
    Try 
    { 
    $SQLConnection = New-Object System.Data.SQLClient.SQLConnection 
    $SQLConnection.ConnectionString ="server=$SCCMSQLSERVER;database=$DBNAME;Integrated Security=True;" 
    $SQLConnection.Open() 
    } 
    catch 
    { 
        [System.Windows.Forms.MessageBox]::Show("Failed to connect SQL Server:")  
    } 

    $SQLCommand = New-Object System.Data.SqlClient.SqlCommand 
    $SQLCommand.CommandText = "select a.FileName,a.AgentFileId,b.machName FROM Storage.AgentFile as a JOIN machNameTab b ON a.AgentGuid = b.agentGuid where a.AgentFileID = @fileidifo"
    $SQLCommand.Parameters.Add("fileidifo", $file);
    $SQLCommand.Connection = $SQLConnection 

    $SQLAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
    $SqlAdapter.SelectCommand = $SQLCommand                  
    $SQLDataset = New-Object System.Data.DataSet 
    $SqlAdapter.fill($SQLDataset) | out-null 

    $userdateinfo = $data[0] 
    $machinenameinfo = $data[2]
    $userdateinfo
    $machinenameinfo
    $SQLConnection.close()

}
但是,我不确定这是否有效,我不确定我是否拥有正确的declare变量和代码,并且我需要从文件名中删除.dat,因为表中的数据如下所示

一旦该部分正常工作,我将使用Rename Item使用从SQL查询中提取的信息重命名该项,如下所示:

Rename-Item "C:\Kaseya\Storage\1\Agents\791729858106897\1\1\a2955462-52fb-4727-a7ea-21ddf019e5ea.dat" -NewName $machinenameinfo-$userdateinfo

但是,我不确定如何再次获取文件的完整路径,因为我认为它不是$file的一部分,因为我已将其筛选为仅选择Name属性。

请澄清什么不起作用-您是否收到错误或发生了什么情况?我得到以下信息:
无法索引到空数组中。在第22行char:27+$userdateinfo=$data[
$data
没有定义,至少在您发布的代码中没有定义。我假设它应该是
$SQLDataset