使用 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这边做:

  1. 创建将从 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
  1. 创建工作。

第一步是 EXEC dbo.create_a_script_and_write_to_file,下一步是类型 操作系统 (CmdExec)powershell.exe -File "D:\file.ps1"

在 运行 完成这项工作后 - table 的 PathFrom 列中的所有文件都将移至 PathWhere