使用 powershell 从多个源复制到多个目的地
copying from mutliple sources to multiple destinations using powershell
是否可以使用 powershell 将文件从多个源复制到多个目标?我已经研究了很多,但找不到任何解决方案。这多个来源和目的地的信息在SQLtable中。任何人都可以指出我正确的方向或就如何处理提出建议吗?
我使用以下代码在数据table 中填充了数据。现在我想使用数据 table 中的数据,其中包含源位置和目标位置以及 运行 副本
$dataSource = “.\SQLEXPRESS”
$user = “user”
$pwd = “1234”
$database = “Test”
$connectionString = “Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;”
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$query = “SELECT * FROM Source&destinationinfo”
$command = $connection.CreateCommand()
$command.CommandText = $query
$table = new-object “System.Data.DataTable”
$table.Load($result)
table[Source&destinationinfo]
中的数据如下:
SourceLocation DestinationLocation
\abc\test\ \def\test\
\ghi\test\ \jkl\test\
你可以在SQL这边做:
- 创建将从 table 中获取数据并创建脚本的存储过程。
示例:
CREATE PROCEDURE dbo.create_a_script_and_write_to_file
AS
BEGIN
SET NOCOUNT ON;
DECLARE @x nvarchar(max),
@filename nvarchar(max) = 'D:\file.ps1'
--here we generate script and put in @x
SELECT @x = STUFF((
SELECT top 5 'copy-item -Path "'+ PathFrom + '" -Destination "' + PathWhere + '" '
FROM dbo.YourTable
FOR XML PATH('')
),1,0,'')
--here we write @x in file
DECLARE @FSO int
DECLARE @hr int
DECLARE @src varchar(255)
DECLARE @desc varchar(255)
DECLARE @oFile int
-- Create OLE Automation Object
EXEC @hr = sp_OACreate 'Scripting.FileSystemObject', @FSO OUT
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @FSO, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
-- Create the XML file
EXEC @hr = sp_OAMethod @FSO, 'CreateTextFile', @oFile OUT, @filename, 8 , True
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @FSO, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
EXEC @hr = sp_OAMethod @oFile, 'Write', NULL, @x
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @FSO, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
-- Clear used objects
EXEC @hr = sp_OADestroy @FSO
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @FSO, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
EXEC @hr = sp_OADestroy @oFile
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @oFile, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
END
- 创建工作。
第一步是 EXEC dbo.create_a_script_and_write_to_file
,下一步是类型 操作系统 (CmdExec):powershell.exe -File "D:\file.ps1"
在 运行 完成这项工作后 - table 的 PathFrom
列中的所有文件都将移至 PathWhere
。
是否可以使用 powershell 将文件从多个源复制到多个目标?我已经研究了很多,但找不到任何解决方案。这多个来源和目的地的信息在SQLtable中。任何人都可以指出我正确的方向或就如何处理提出建议吗?
我使用以下代码在数据table 中填充了数据。现在我想使用数据 table 中的数据,其中包含源位置和目标位置以及 运行 副本
$dataSource = “.\SQLEXPRESS”
$user = “user”
$pwd = “1234”
$database = “Test”
$connectionString = “Server=$dataSource;uid=$user; pwd=$pwd;Database=$database;Integrated Security=False;”
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()
$query = “SELECT * FROM Source&destinationinfo”
$command = $connection.CreateCommand()
$command.CommandText = $query
$table = new-object “System.Data.DataTable”
$table.Load($result)
table[Source&destinationinfo]
中的数据如下:
SourceLocation DestinationLocation
\abc\test\ \def\test\
\ghi\test\ \jkl\test\
你可以在SQL这边做:
- 创建将从 table 中获取数据并创建脚本的存储过程。
示例:
CREATE PROCEDURE dbo.create_a_script_and_write_to_file
AS
BEGIN
SET NOCOUNT ON;
DECLARE @x nvarchar(max),
@filename nvarchar(max) = 'D:\file.ps1'
--here we generate script and put in @x
SELECT @x = STUFF((
SELECT top 5 'copy-item -Path "'+ PathFrom + '" -Destination "' + PathWhere + '" '
FROM dbo.YourTable
FOR XML PATH('')
),1,0,'')
--here we write @x in file
DECLARE @FSO int
DECLARE @hr int
DECLARE @src varchar(255)
DECLARE @desc varchar(255)
DECLARE @oFile int
-- Create OLE Automation Object
EXEC @hr = sp_OACreate 'Scripting.FileSystemObject', @FSO OUT
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @FSO, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
-- Create the XML file
EXEC @hr = sp_OAMethod @FSO, 'CreateTextFile', @oFile OUT, @filename, 8 , True
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @FSO, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
EXEC @hr = sp_OAMethod @oFile, 'Write', NULL, @x
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @FSO, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
-- Clear used objects
EXEC @hr = sp_OADestroy @FSO
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @FSO, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
EXEC @hr = sp_OADestroy @oFile
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @oFile, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
END
- 创建工作。
第一步是 EXEC dbo.create_a_script_and_write_to_file
,下一步是类型 操作系统 (CmdExec):powershell.exe -File "D:\file.ps1"
在 运行 完成这项工作后 - table 的 PathFrom
列中的所有文件都将移至 PathWhere
。