web-dev-qa-db-ja.com

ネットワークドライブの内容をローカルフォルダにコピーします

自動化されたサードパーティのバックアップがファイルをネットワークドライブに配置しています。

次のPowerShellスクリプトを使用して、このドライブをDBサーバー上のローカルフォルダーにマップしました

$pass ="xxxx"|ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PsCredential('MERIVALEHOSTED\SVC.APPSQL',$pass)

New-PSDrive -Name K -PSProvider "FileSystem" -Credential $cred -Root '\\10.0.30.113\sqlbackup\ACCCluster01$AccWarehouseAG';
Get-PsDrive;

これにより、ネットワークドライブがKドライブにマップされます。

次に、このフォルダー構造全体(OlaHallengrensバックアップの出力-DIFF/FULL/LOGS)をローカルドライブにコピーしますが、このフォルダーの現在の内容を削除する前ではありません。

これは、自動DB復元の最初のステップです。 DbaTools powershellモジュールを使用して復元プロセスを正常に自動化できましたが、ファイルのコピーが機能していません。

私は両方を試しました:

Copy-Item -path K:\*.* -destination M:\VoxtronRestore\;

これと同様に:

function Copy-Directories 
{
    param (
        [parameter(Mandatory = $true)] [string] $source,
        [parameter(Mandatory = $true)] [string] $destination        
    )

    try
    {
        Get-ChildItem -Path $source -Recurse -Force |
            Where-Object { $_.psIsContainer } |
            ForEach-Object { $_.FullName -replace [regex]::Escape($source), $destination } |
            ForEach-Object { $null = New-Item -ItemType Container -Path $_ }

        Get-ChildItem -Path $source -Recurse -Force |
            Where-Object { -not $_.psIsContainer } |
            Copy-Item -Force -Destination { $_.FullName -replace [regex]::Escape($source), $destination }
    }

    catch
    {
        Write-Host "$_"
    }
}

$source = "K:\"
$dest = "M:\VoxtronRestore"

Copy-Directories $source $dest

1つ目は何もコピーできず、2つ目はソースをそれ自体で上書きすることについてエラーが発生します。

誰かがこれを正常に完了することを可能にする上記のより良い提案や修正があるかどうか疑問に思っています。

1
Asher

*.*は、K:\の直下にあるファイルのみを返します(おそらく、ここにデータベース/インスタンス名のフォルダーがあります)。代わりにCopy-Item K:\ -Recurse M:\VoxtronRestoreを使用してください。

0
Arun Gopinath