我正在创建一个脚本,该脚本将扫描.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,因为表中的数据看起来像这样。
一旦我有了这个部分工作,我将使用Rename-Item重命名项目,其中包含从SQL查询中提取的信息,如下所示:
Rename-Item "C:\Kaseya\Storage\1\Agents\791729858106897\1\1\a2955462-52fb-4727-a7ea-21ddf019e5ea.dat" -NewName $machinenameinfo-$userdateinfo
但是我不确定如何再次获取文件的完整路径,因为我不认为它仍然是$ file的一部分,因为我已将其过滤为仅选择Name属性。