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

时间:2018-01-23 20:40:12

标签: sql powershell

我正在创建一个脚本,该脚本将扫描.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()

}

但是我这不起作用,我不确定我有声明变量和代码是否正确,我还需要从文件名中删除.dat,因为表中的数据看起来像这样。

SQL Query results

一旦我有了这个部分工作,我将使用Rename-Item重命名项目,其中包含从SQL查询中提取的信息,如下所示:

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

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

0 个答案:

没有答案